十进制到uint8_t数组

Decimal to uint8_t array

提问人:noor palasamudram 提问时间:12/28/2021 最后编辑:noor palasamudram 更新时间:1/21/2022 访问量:571

问:

uint8_t certificateSerialNumber[] = {0x02, 0x04, 0x24,0xA8,0x16,0x34}; 

十进制614995508(实际序列号)转换为十六进制 24A81634

上面的 unit8 数组是序列号的 TLV(标签长度值)三元组的表示 其中 T 是 0X02,L 是 0X04,V 是十六进制字符串。

因此,我能够一次将十六进制字符串拆分为两个字符

如何将十六进制转换为TLV三元组格式,如上图所示unit8_t objective-c中的数组? 参考: https://learn.microsoft.com/en-us/windows/win32/seccertenroll/about-integer

Objective-C nsstring der TLV ASN.1

评论

3赞 sbooth 12/29/2021
什么是“字符串/整数”?
0赞 apodidae 12/29/2021
此参考可能会有所帮助:stackoverflow.com/questions/16635548/...
0赞 apodidae 12/29/2021
将类型从“uint8_t”更改为普通的“int”,并使用上述参考中的解决方案;它应该起作用。如果它不起作用,请发布问题代码。
0赞 Leo Dabus 12/29/2021
您确定您的数据未加密吗?
0赞 noor palasamudram 12/29/2021
@LeoDabus非常感谢回复我的数组是 ASN.1 表示

答:

0赞 matt 1/21/2022 #1

所以我对小数有点惊讶,但无论如何:

let what: Decimal = 614995508
var num = (what as NSDecimalNumber).uint64Value
var arr = [UInt8]()
while num > 0 {
    let rem = num % (16*16)
    arr.append(UInt8(rem))
    num = num / (16*16)
}
arr.append(UInt8(arr.count))
arr.append(2)
arr = arr.reversed()
arr.forEach {
    print(String($0, radix: 16), terminator: " ")
}

结果:2 4 24 a8 16 34

评论

0赞 noor palasamudram 1/21/2022
我还有一个疑问,您提供的十六进制转换也会支持十六进制签名 2 的赞美吗?
0赞 matt 1/21/2022
请不要在评论中说“谢谢”。— 请不要引入无关紧要的问题。我已经回答了你提出的问题。如果您有其他问题,请按“提问”按钮并提出。