我在unsigned char *hex_1
中有一个包含以下内容的十六进制:
hex_1[0] = 0x5b
hex_1[1] = 0x83
hex_1[2] = 0xb6
hex_1[3] = 0xe9
我希望将其与十六进制值进行比较:1ca0aaf9
。
我该怎么办?我应该创建一个新的字符数组,将1ca0aaf9
拆分为1c
ca
0a
,然后执行memcpy()?
编辑2:我希望它像{1}}一样与1c等进行比较......
答案 0 :(得分:2)
你可能想要这个:
uint32_t val = *(uint32_t*)(hex_1); // uint32_t is available by #include <stdint.h>
if (val == 0x1ca0aaf9)
{
}
在大端架构上,你已经完成了。在Intel和其他小端架构上,您需要确定该字节数组是否在逻辑上被解释为以网络字节顺序解释为0x5b83b6e9(十进制1535358697)。或者,如果它是以主机字节顺序(0xe9b6835b)(十进制3921052507)。如果字节数组是网络字节顺序,那么您将需要交换字节。这就是ntohl函数所做的。
uint32_t val = *(uint32_t*)(hex_1);
val = ntohl(val); // <arpa/inet.h> or <winsock2.h>
if (val == 0x1ca0aaf9)
{
}