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

时间:2015-03-02 06:06:01

标签: c gcc

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

例如,我有

unsigned char ZbAddStr[16] = "0013A20040B5A5EE"

我希望将其转换为

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

我该如何进行这种转变?

1 个答案:

答案 0 :(得分:2)

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

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

  3. 将号码保存到ZbAddNew

  4. 这应该有效:

    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]);
    }