将整数转换为UInt8单位数组

时间:2017-09-13 09:56:02

标签: swift

我有号码 - 94887253(用ASCII格式),它可以表示为: 让data = [UInt8]([0x39,0x34,0x38,0x38,0x37,0x32,0x35,0x33])

如何编写一个将数字转换为这样的UInt8单元数组的函数?感谢。

3 个答案:

答案 0 :(得分:2)

我会使用轮班。

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

这是类型安全和endian独立的(数组是小端,但很容易反转)但比使用不安全的指针慢。

修改

是的,所以问题不明确。如果你想要数字的ASCII表示,那么简单的方法是把它变成一个字符串并取UTF-8

Array("\(theInputNumber)".utf8)

或者,如果您需要自己动手,请修改我的第一个答案

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

阵列的顺序是相反的,但我会让你弄清楚如何正确地解决这个问题。

还需要修改负数。

答案 1 :(得分:2)

您正在寻找的是带有ASCII的数组 数字的(十进制)字符串表示的代码:

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

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

答案 2 :(得分:1)

如果你想获得一个数字的十进制字符串表示的ASCII代码,你可以像这样编写自己的函数:

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

getAsciiCodesOfDigits(numberToConvert)

以上功能有效,因为使用Int作为输入可确保String(n).unicodeScalars的每个元素都是ASCII字符,因此可以表示为UInt8对于ASCII个字符,UnicodeScalar.value以十进制形式返回ASCII代码。