我有一个这样的数组:
unsigned char arr[] = {0x55};
unsigned char byte = arr[0];
我想让 byte 成为十六进制表示,就像它在数组中一样。但是当我在 gdb 中查看它时,我不断得到那个字节是 85 'U'。发生了什么?为什么我看不到 0x55,甚至看不到二进制表示 110111?
谢谢你的帮助!
GDB 向您显示与字符代码对应的可打印字符0x55
,因为您拥有的值是char
. 要将其打印为十六进制,请使用:
(gdb) p/x byte
用来p/x byte
看看。 gdb
除非您另有说明,否则默认打印十进制。您会得到 ,'U'
因为这也是打印char
类型变量的默认值的一部分。
存储在变量中的值是二进制的——我认为只有你看待它的方式才会让你感到困惑。 0x55
、85
和'U'
都是解释相同数据的不同方式。
在 print 上使用正确的格式标志:
任何我当然希望您的编译器将 0x55 变成 0x01010101 ,仅此而已。
发生了什么?
什么都没发生。它不是数组中的十六进制。它在数组中是二进制的。它在源代码中是十六进制的。如果要将其格式化为十六进制,请执行此操作。没有人阻止你。