在 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中文网其他相关文章!