【问题标题】:Decimal to uint8_t array小数到 uint8_t 数组
【发布时间】:2021-12-28 13:25:32
【问题描述】:
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

【问题讨论】:

  • 什么是“字符串/整数”?
  • 此参考资料可能会有所帮助:stackoverflow.com/questions/16635548/…
  • 将类型从 'uint8_t' 更改为纯 'int' 并使用上述参考中的解决方案;它应该工作。如果不起作用,请发布问题代码。
  • 您确定您的数据没有加密吗?
  • @LeoDabus Thanq 回复我的数组是 ASN.1 表示

标签: objective-c nsstring der tlv asn.1


【解决方案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

【讨论】:

  • 我还有一个疑问,你提供的十六进制转换是否也支持十六进制签名2的恭维?
  • 请不要在评论中说“谢谢”。 — 请不要提出无关的问题。我已经回答了你问的问题。如果您有其他问题,请按下按钮并提出问题。
猜你喜欢
  • 2012-06-06
  • 1970-01-01
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
相关资源
最近更新 更多