出于某些测试目的,我想显示 int8_t 变量,将它们转换为 uint8_t 并以十六进制再次显示它们。
#include <iostream>
#include <sstream>
int main()
{
std::int8_t t = -1;
std::cout << std::hex << +t << std::endl;
std::cout << std::hex << +static_cast<std::uint8_t>(t) << std::endl;
return 0;
}
这是我对该程序的输出:
$ ./a.exe
ffffffff
ff
cout 似乎将 int8_t 格式化为 4 个字节。这是为什么?由于它是一个单字节值,因此人们希望看到 ff,如 uint8_t,本例中就是这种情况。
最佳答案
Why is the output format of an int8_t uses 4 bytes?
事实并非如此。您输出的是 int
,而不是 int8_t
。
要通过词法转换将 uint8_t
流式传输到 std::cout
,您已正确使用 +
触发对 的提升int
(需要,因为 char
和相关类型不通过 IOstreams 进行词法转换)。
但是……您已将其提升为 int
。所以你会看到类似 int
的东西。
您的第二行很好,可以确保您不会违反符号扩展。
关于c++ - 为什么一个int8_t的输出格式要用4个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56561795/