0

私はこのような配列を持っています:

   unsigned char arr[] = {0x55}; 
   unsigned char byte = arr[0];

そして、配列にあるのと同じように、バイトを16進表現にしたいと思います。しかし、gdb でそれを見ると、そのバイトが 85 'U' であることがわかります。何が起きたの?0x55 やバイナリ表現の 110111 が表示されないのはなぜですか?

助けてくれてありがとう!

4

4 に答える 4

3

0x55値が type であるため、GDB は文字コードに対応する印刷可能な文字を表示しますchar。16 進数として出力するには、次を使用します。

(gdb) p/x byte
于 2013-02-10T22:38:16.030 に答える
3

使っp/x byteて見てください。 gdb特に指定しない限り、デフォルトでは 10 進数で出力されます。'U'これは、印刷char型変数のデフォルトの一部でもあるためです。

変数に格納されている値はバイナリです。混乱しているのは、その見方だけだと思います。 0x5585、および'U'は、同じデータを解釈するすべての異なる方法です。

于 2013-02-10T22:39:00.633 に答える
2

printで正しいフォーマット フラグを使用します。

あなたのコンパイラが 0x55 を 0x01010101 にすることを願っています。

于 2013-02-10T22:38:15.173 に答える
1

何が起きたの?

何も起こっていません。配列では16進数ではありません。配列ではバイナリです。ソースコードでは 16 進数です。16 進数としてフォーマットする場合は、そうします。誰もあなたを止めていません。

于 2013-02-10T23:10:16.333 に答える