如何将 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}
。
我该如何进行这种转换?
将 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]);
}
我正在尝试将 64 位 zigbee 地址转换为其等效的十六进制地址。我经历了很多 post 但找不到任何解决方案。我有字符串格式的 64 位地址,我希望将其转换为等效的十六进制。
比如我有
unsigned char ZbAddStr[16] = "0013A20040B5A5EE"
我想把它转换成
unsigned char ZbAddNew[8] = {0x00, 0x13, 0xA2, 0x00, 0x40, 0xB5, 0xA5, 0xEE}
。
我该如何进行这种转换?
将
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]);
}