[英]Printing a hex array in console
我有一個uint8_t
類型的數組,尺寸為4x4,我使用嵌套的for循環顯示數組,十六進制值通過sprintf()
轉換為十六進制字符串。
void hexD(uint8_t state[4][4])
{
char x[2];
for(int i = 0; i < 4; i++)
{
cout << "\n";
for(int j = 0; j < 4; j++)
{
cout << j <<"\n"; //displays the value of j
sprintf(x, "%x", state[i][j]);
cout << x << "\t";
}
}
}
問題是for循環內部不斷循環運行,因為j的值從0開始,然后從1開始,然后到2,但不是回到3,而是回到1,j在1和2之間交換,因此循環無限運行。
任何解決方案。
謝謝。
您的x
只有兩個空格,但是您正在向其中寫入更多字符。 例如,十六進制的0
是"00"
,兩個字符加一個結束符'\\0'
。
那會覆蓋相鄰的內存,而您的j
恰好在那里並被覆蓋。
增加x[]
的大小,它應該可以工作。
取決於您在state[4][4]
,您很可能最終會溢出x
數組(請記住,您需要一個最多FF
(2個字符)+1的位置作為終止'\\0'
)。 那是未定義的行為。 修復它( char x[3];
),就可以了。 這是一個mcve :
#include <iostream>
#include <cstdint>
#include <cstdio>
using namespace std;
void hexD(uint8_t state[4][4])
{
char x[3];
for(int i = 0; i < 4; i++)
{
cout << "\n";
for(int j = 0; j < 4; j++)
{
cout << j <<"\n"; //displays the value of j
sprintf(x, "%x", state[i][j]);
cout << x << "\t";
}
}
}
uint8_t state[4][4]={
255,255,255,255,
0, 1, 2, 3,
0, 1, 2, 3,
0, 1, 2, 3,
};
int main()
{
hexD(state);
}
char x[2];
您的“十六進制輸出”只有兩個字節,但沒有可用空間用於null
字符。
向容量較小的數組中寫入更多內容是未定義的行為 。
將x
數組大小增加到3:
char x[3];
由於根據sprintf
:
內容后面會自動附加一個終止的空字符。
因此,總共有三個字符, 包括 null
字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.