c++ - 为什么一个int8_t的输出格式要用4个字节?

标签 c++

出于某些测试目的,我想显示 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/

相关文章:

c++ - netbeans 在同一目录中找不到 C++ 头文件

c++ - Windows 中 _strnicmp 的 LPTSTR 等价物是什么?

c++ - 什么时候应该删除动态创建的单例对象?

c++ - 如何使用自定义流操纵器在类实例中保存数据?

java - 如何使用 JNA 将二维数组从 Java 传递到 C

c++ - 打开大量文件时 Windows CreateFile 速度缓慢

c++ - 如何使用 cairomm 重复模式?

c++ - linux下c/c++的加密库和压缩库

c++ - 如何将 Eigen::eigenvector().col(0).real() 转换为 std vector ?

c++ - VS2017 : How can I write per-file options in . vcxproj,没有破坏我设置的过滤器?