次のコードで発生するエラーを理解しようとしています
bytes2bits(p,q,pixels)
u_char *p, *q;
register u_int pixels;
{
register u_char *r, a;
register u_long *l;
...
switch (*l++) {
case 0x00000000: a = 0x00; break;
case 0x00000001: a = 0x10; break;
case 0x00000100: a = 0x20; break;
case 0x00000101: a = 0x30; break;
case 0x00010000: a = 0x40; break;
case 0x00010001: a = 0x50; break;
case 0x00010100: a = 0x60; break;
case 0x00010101: a = 0x70; break;
case 0x01000000: a = 0x80; break;
case 0x01000001: a = 0x90; break;
case 0x01000100: a = 0xa0; break;
case 0x01000101: a = 0xb0; break;
case 0x01010000: a = 0xc0; break;
case 0x01010001: a = 0xd0; break;
case 0x01010100: a = 0xe0; break;
case 0x01010101: a = 0xf0; break;
default:
(void) fprintf(stderr,"bytes2bits: bad value %x\n",*--l);
exit(1);
}
......
}
私の問題は、このコードブロックがエラーメッセージで終了するという事実にあります
bytes2bits: bad value 1010100
私は 0x01010100 == 1010100 だと思っていたでしょう (注: fprintf は出力形式として %x を使用しているため、16 進数を見ています。また、%d 出力形式で printf をテストして使用すると、値 16843008 (= 16^6 + 16^4 + 16^2)、これは 0x01010100 と同等の 10 進数表現です。'bad value' 1010100 出力は、私の printf チェック ステートメントの存在によって影響を受けません)。
bytes2bits: bad value 1010100
switch ステートメントが 1010100 を最後から 2 番目のケース (つまり、0x01010100: a = 0xe0) として認識しないという事実をどのように理解できますか?