首页 > 后端开发 > C++ > 如何在 C 中正确打印无符号 8 位变量?

如何在 C 中正确打印无符号 8 位变量?

DDD
发布: 2024-11-11 01:13:03
原创
830 人浏览过

How to Print Unsigned 8-bit Variables Correctly in C  ?

在 C 中操作无符号 8 位变量

在 C 中处理无符号 8 位变量时,您可能会遇到挑战使用 ostream 正确打印它们。默认情况下,ostream 将这些变量解释为 char,从而导致意外输出。

理解问题

Unsigned char 和 uint8_t 都是表示 8 位无符号整数的数据类型。但是,在 C 中, ostream 自动将这些值视为字符,从而导致不正确的十六进制表示。以下代码片段演示了该问题:

unsigned char a = 0;
unsigned char b = 0xff;
cout << "a is " << hex << a << "; b is " << hex << b << endl;
登录后复制

输出将是:

a is ^@; b is 377
登录后复制

而不是所需的输出:

a is 0; b is ff
登录后复制
登录后复制

解决问题

要正确地将 unsigned char 变量打印为十六进制,您需要在打印之前将它们显式转换为 int:

cout << "a is " << hex << (int) a << "; b is " << hex << (int) b << endl;
登录后复制

这将产生预期的输出:

a is 0; b is ff
登录后复制
登录后复制

如果您希望在输出中进行前导零填充,您可以使用以下命令代码:

#include <iomanip>

//...

cout << "a is " << setw(2) << setfill('0') << hex << (int) a ;
登录后复制

替代解决方案

MartinStettner 的解决方案提供了一种替代方法来解决该问题:

std::cout << std::hex << static_cast<unsigned int>(a);
登录后复制

此方法避免了显式转换的需要,并提供了更简洁的解决方案。

以上是如何在 C 中正确打印无符号 8 位变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板