整数への 2 つのポインターを送信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
はバイトの各ペアを順番に比較します。
ご覧のように:
メモリに整数をリトルエンディアン形式で格納するシステムを使用している必要があります (つまり、5 は05 00 00 00
で、256 は です00 01 00 00
)。これらの値を使用するmemcmp
と、最初の値の最初のバイトが 2 番目の値の最初のバイトより大きいため、戻り値は 0 より大きくなります。