2017-09-13 239 views
0

我有數字 - 94887253(ASCII),它可以表示爲: let data = [UInt8]([0x39,0x34,0x38,0x38,0x37,0x32,0x35,0x33 ])將整數轉換爲UInt8單元的數組

如何編寫一個將數字轉換爲這樣的UInt8單元數組的函數?謝謝。

+2

'[0x39,0x34,0x38,0x38,0x37,0x32,0x35,0x33]'與數字「12345678」有關? –

+0

@MartinR與它無關,12345678是隨機的,就像我在十六進制中提供的數字一樣。 –

+0

但是你仍然需要明確你想要的邏輯。 ASCII? UTF8?十六進制值(0xNM)只是表示一個Int的另一種方式,1 == 0x01,不是?邏輯是什麼? – Larme

回答

2

看來,你正在尋找的是與ASCII數組數的(十進制)的字符串表示的 代碼:

let x = 94887253 
let a = Array(String(x).utf8) 

print(a == [0x39, 0x34, 0x38, 0x38, 0x37, 0x32, 0x35, 0x33]) // true 
+0

我試過讓rCode = 94887253 let arr = Array(String(rCode).utf8) print(「arr?\(arr)」)但是以 - [57,52,56,56,55,50, 53,51] –

+2

@EvgeniyKleban這是相同的數組。基數10中的57是十六進制的「0x39」。 – JeremyP

+0

@EvgeniyKleban這就是爲什麼我添加了print語句:爲了證明結果就是你要找的。 –

1

我會使用班次。

var array: [UInt8] = [] 
var n = theInputNumber 
while n > 0 
{ 
    array.append(UInt8(n & 0xff)) 
    n >>= 8 
} 

這是安全型和端獨立(數組是小端,但很容易反向)比使用不安全的指針,但速度慢。

編輯

權,所以這個問題並不清楚。如果你想數的ASCII represenatation,最簡單的方法就是把它變成一個字符串,並採取UTF-8

Array("\(theInputNumber)".utf8) 

或者如果您需要推出自己的,修改我的第一個答案

var array: [UInt8] = [] 
var n = theInputNumber 
while n != 0 
{ 
    array.append(UInt8(n % 10) + 0x30) 
    n /= 10 
} 

該數組是相反的順序,但我會讓你找出如何正確的方式。

也需要修改負數。

+0

非常感謝你! –

1

如果你想獲得十進制字符串的ASCII碼一些代表,您可以編寫自己的函數,它是這樣的:

func getAsciiCodesOfDigits(_ n: Int)->[UInt8]{ 
    return String(n).unicodeScalars.map{UInt8($0.value)} 
} 

getAsciiCodesOfDigits(numberToConvert) 

以上功能的工作原理,因爲使用Int作爲輸入確保了String(n).unicodeScalars每個元素將是一個ASCII字符,因此它可以表示爲UInt8ASCII字符,UnicodeScalar.value以十進制形式返回ASCII碼。

+0

Pasztor非常感謝你! –