私はこのような配列を持っています:
unsigned char arr[] = {0x55};
unsigned char byte = arr[0];
そして、配列にあるのと同じように、バイトを16進表現にしたいと思います。しかし、gdb でそれを見ると、そのバイトが 85 'U' であることがわかります。何が起きたの?0x55 やバイナリ表現の 110111 が表示されないのはなぜですか?
助けてくれてありがとう!
0x55
値が type であるため、GDB は文字コードに対応する印刷可能な文字を表示しますchar
。16 進数として出力するには、次を使用します。
(gdb) p/x byte
使っp/x byte
て見てください。 gdb
特に指定しない限り、デフォルトでは 10 進数で出力されます。'U'
これは、印刷char
型変数のデフォルトの一部でもあるためです。
変数に格納されている値はバイナリです。混乱しているのは、その見方だけだと思います。 0x55
、85
、および'U'
は、同じデータを解釈するすべての異なる方法です。
printで正しいフォーマット フラグを使用します。
あなたのコンパイラが 0x55 を 0x01010101 にすることを願っています。
何が起きたの?
何も起こっていません。配列では16進数ではありません。配列ではバイナリです。ソースコードでは 16 進数です。16 進数としてフォーマットする場合は、そうします。誰もあなたを止めていません。