<分区>
我正在尝试创建一个 1 字节值的数组,使用无符号字符来保存值。
我的代码是这样的:
unsigned char state[4][4] = { {0xd4, 0xe0, 0xb8, 0x1e},
{0xbf, 0xb4, 0x41, 0x27},
{0x5d, 0x52, 0x11, 0x98},
{0x30, 0xae, 0xf1, 0xe5}};
其中每个值都是 2 个十六进制数字,构成一个字节。但是,当我尝试使用
打印数组时 cout << "\nInitial State \n------------------------------------------------------\n";
for(int x = 0; x < 4; x++)
{
for(int y = 0; y < 4; y++)
cout << hex << setw(2) << setfill('0') << state[x][y] << " ";
cout << "\n";
}
我没有得到十六进制值,而是得到了奇怪的符号
Initial State
---------------------
0Ô 0à 0¸ 0
0¿ 0´ 0A 0'
0] 0R 0 0˜
00 0® 0ñ 0å
我知道 0 来自 set(w) 和 setfill('0') 但我不明白为什么它没有显示正确的值。但是,如果我将状态设置为无符号长整型,那么我将获得正确的值。
所以我很困惑。如果一个 char 恰好包含一个字节,为什么 char 不能将该字节显示为十六进制值?