首页 > 解决方案 > 在控制台中打印十六进制数组

问题描述

我有一个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 之间交换,因此循环无限运行。

对此的任何解决方案。

谢谢。

标签: c++for-loopmultidimensional-arrayhexnested-loops

解决方案


char x[2];

您的“十六进制输出”只有两个字节,但一个null字符没有可用空间。

向容量较小的数组写入更多内容是未定义的行为

x数组大小增加到 3:

char x[3];

因为根据sprintf

内容后会自动附加一个终止空字符。

因此,您总共有三个字符,包括字符null


推荐阅读