c++ - 在控制台中打印十六进制数组
问题描述
我有一个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 之间交换,因此循环无限运行。
对此的任何解决方案。
谢谢。
解决方案
char x[2];
您的“十六进制输出”只有两个字节,但一个null
字符没有可用空间。
向容量较小的数组写入更多内容是未定义的行为。
将x
数组大小增加到 3:
char x[3];
因为根据sprintf
:
内容后会自动附加一个终止空字符。
因此,您总共有三个字符,包括字符null
。
推荐阅读
- python - 如何在一个图中将python中的曲面和颤动图结合起来
- javascript - 开始滚动动画,它到达该部分
- r - 如何从 R jupyter notebook 将文件导出到电脑?
- android - 检测屏幕是否由于本地化更改而被镜像 Android
- apache2 - 尝试连接到新环境时出现 503 错误
- python - 有什么方法可以显示 .py 文件的图标吗?
- mysql - Laravel 在 whereHas 中的多个 where 子句约束 hasMany 关系
- php - PHP使用变量创建MySQL数据库
- ansible - 如何使用 Ansible Dynamic Inventory for AWS 显示标签名称?
- php - 在图片中添加版权网址