0

我有一个这样的数组:

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

我想让 byte 成为十六进制表示,就像它在数组中一样。但是当我在 gdb 中查看它时,我不断得到那个字节是 85 'U'。发生了什么?为什么我看不到 0x55,甚至看不到二进制表示 110111?

谢谢你的帮助!

4

4 回答 4

3

GDB 向您显示与字符代码对应的可打印字符0x55,因为您拥有的值是char. 要将其打印为十六进制,请使用:

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

用来p/x byte看看。 gdb除非您另有说明,否则默认打印十进制。您会得到 ,'U'因为这也是打印char类型变量的默认值的一部分。

存储在变量中的值是二进制的——我认为只有你看待它的方式才会让你感到困惑。 0x5585'U'都是解释相同数据的不同方式。

于 2013-02-10T22:39:00.633 回答
2

在 print 上使用正确的格式标志

任何我当然希望您的编译器将 0x55 变成 0x01010101 ,仅此而已。

于 2013-02-10T22:38:15.173 回答
1

发生了什么?

什么都没发生。它不是数组中的十六进制。它在数组中是二进制的。它在源代码中是十六进制的。如果要将其格式化为十六进制,请执行此操作。没有人阻止你。

于 2013-02-10T23:10:16.333 回答