小数到uint8_t数组

Decimal to uint8_t array

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

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

上面的unit8数组是序列号在TLV(tag length value)三元组上的表示 其中 T 为 0X02,L 为 0X04,V 为十六进制字符串。

所以我可以一次将十六进制字符串拆分为两个字符

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

所以我对十进制有点惊讶,但无论如何:

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([=10=], radix: 16), terminator: " ")
}

结果:2 4 24 a8 16 34