我有号码 - 94887253(用ASCII格式),它可以表示为: 让data = [UInt8]([0x39,0x34,0x38,0x38,0x37,0x32,0x35,0x33])
如何编写一个将数字转换为这样的UInt8单元数组的函数?感谢。
答案 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代码。