下面是字节数组
let byteArray: [UInt8] = [53, 51, 57, 52] //5394
字符串
这是4个字节的UInt 32值编码为UTF-8字符。我可以通过使用字符串字面量获得UInt 32值
let byteArray: [UInt8] = [53, 51, 57, 52]
let string = String(bytes: byteArray, encoding: .utf8)!
print("\(string)")
let intValue = UInt32(string)!
型
我经常在我的程序中使用大数据集进行这种转换。所以,我不想做这种转换和隐式地展开可选项,我想知道有没有办法直接使用UTF-8字符初始化UInt 32?谢谢!
2条答案
按热度按时间i86rm4rw1#
实际上,如果你的字节表示一个数字的UTF-8表示,但你不能100%确定这是真的,那么做你所做的并安全地展开是处理格式错误的数字的最简单方法。
但是,如果你知道你总是有一个由四个ASCII数字组成的数组,你可以直接进行转换。只要它是以10为基数,你可以简单地通过从ASCII中减去48来获得每个数字,48是0的ASCII表示。
字符串
如果输入不是你所期望的,上面的代码中有几个陷阱。如果数组超过9位,当
result
溢出时代码会崩溃。如果数组包含ASCII数字以外的字节,你会得到一个无意义的结果。siotufzp2#
Jeremy的回答是一个好的开始,但我对盲目解析未经验证的输入并在输入格式不正确时崩溃的代码持怀疑态度。
从Jeremy的答案开始,我会创建一个抛出函数:
字符串
使用该函数的演示代码:
型
该测试代码的输出如下所示:
字节数组[49,48,48,48] = 1000
字节数组[49,50,51,52] = 1234
ByteArray [49,48,48,48,48]长度错误。应该是4个字符。找到的是5个字符
的事务日志已满