如果我发送memcmp
两个指向整数的指针,那么它似乎将整数解释为字符。
例如:
int a = 5;
int b = 256;
int res = memcmp(&a,&b,sizeof(int));
在上面的代码中,它返回 1。
我想更好地理解这个函数,我想知道我是不是用错了,或者是否有类似的函数来比较内存块的int
值。
假设 an 的大小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
按顺序比较每对字节:
如你看到的:
memcmp
将比较字节(又名char
)。要知道int
x 字节中的一个比另一个更大或更小,您需要知道它的表示的字节序。
为什么不直接比较int
s 呢?
*a > *b
*a < *b
*a == *b
*a != *b
您必须使用以小端格式(即 5 is05 00 00 00
和 256 is 00 01 00 00
)将整数存储在内存中的系统。当你memcmp
这些值时,第一个值的第一个字节大于第二个值的第一个字节,所以返回值大于 0。