我正在尝试将64位zigbee地址转换为其等效的十六进制地址。我经历了很多帖子,但找不到任何解决方案。我有64位地址的字符串格式,我希望它成为等效的十六进制。
例如,我有
unsigned char ZbAddStr[16] = "0013A20040B5A5EE"
我希望将其转换为
unsigned char ZbAddNew[8] = {0x00, 0x13, 0xA2, 0x00, 0x40, 0xB5, 0xA5, 0xEE}
。
我该如何进行这种转变?
答案 0 :(得分:2)
将ZbAddStr
的两个字节复制到临时字符串。
使用strtol
以16为基数从这两个字节中提取数字。
将号码保存到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]);
}