如果我发送memcmp
两个指向整数的指针,那么它似乎将整数解释为字符。
例如:
int a = 5;
int b = 256;
int res = memcmp(&a,&b,sizeof(int));
在上面的代码中,它返回1.
我希望更好地了解这个功能,我想知道我是否使用它错了,或者是否有类似的功能来比较保存int
的内存块值。
答案 0 :(得分:2)
假设int
的大小是4个字节(大多数情况,但并非总是如此):
int a = 5; // Lowest address to highest address 0x05 0x00 0x00 0x00
int b = 256; // Lowest address to highest address 0x00 0x01 0x00 0x00
int a = 5; // Lowest address to highest address 0x00 0x00 0x00 0x05
int b = 256; // Lowest address to highest address 0x00 0x00 0x01 0x00
现在,函数memcmp
按顺序比较每对字节:
如你所见:
答案 1 :(得分:1)
memcmp
将比较字节(又名char
)。要知道x个字节的int
是大于还是小于另一个,你需要知道其表示的字节顺序。
为什么不直接比较int
?
*a > *b
*a < *b
*a == *b
*a != *b
答案 2 :(得分:0)
您必须使用以小端格式在内存中存储整数的系统(即5是05 00 00 00
而256是00 01 00 00
)。当memcmp
这些值时,第一个值的第一个字节大于第二个值的第一个字节,因此返回值大于0.