如何将 64 位字符串转换为十六进制?

How to transform 64 bit string into hex?

我正在尝试将 64 位 zigbee 地址转换为其等效的十六进制地址。我经历了很多 post 但找不到任何解决方案。我有字符串格式的 64 位地址,我希望将其转换为等效的十六进制。

比如我有

unsigned char ZbAddStr[16] = "0013A20040B5A5EE"

我想把它转换成

unsigned char ZbAddNew[8] = {0x00, 0x13, 0xA2, 0x00, 0x40, 0xB5, 0xA5, 0xEE}

我该如何进行这种转换?

  1. ZbAddStr 的两个字节复制到临时字符串。

  2. 使用strtol以16为基数从这两个字节中提取数字。

  3. 存号到ZbAddNew.

这应该有效:

char temp[3] = {0};
for (int i = 0; i < 16; i += 2 )
{
   temp[0] =  ZbAddStr[i];
   temp[1] =  ZbAddStr[i+1];
   int num = strtol(temp, NULL, 16);
   ZbAddNew[i/2] = num;
}

这也应该有效(感谢@JonathanLeffler):

for (int i = 0; i < 8; ++i )
{
   sscanf((char*)&ZbAddStr[2*i], "%2X", &ZbAddNum[i]);
}