2017-09-13 244 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非常感谢你! –