如何在二进制中输出int?

时间:2010-07-17 01:01:39

标签: c++ binary type-conversion

int x = 5;
cout<<(char)x;

上面的代码在原始二进制文件中输出一个int x,但只有1个字节。我需要它做的是输出x作为二进制4字节,因为在我的代码中,x可以是0到2 ^ 32-1之间的任何地方,因为

cout<<(int)x;

没有诀窍,我该怎么做?

5 个答案:

答案 0 :(得分:29)

有点晚了,但正如凯蒂在博客中所说,这可能是一个优雅的解决方案:

#include <bitset>
#include <iostream>

int main(){
  int x=5;
  std::cout<<std::bitset<32>(x)<<std::endl;
}

取自: https://katyscode.wordpress.com/2012/05/12/printing-numbers-in-binary-format-in-c/

答案 1 :(得分:9)

您可以使用std::ostream::write()成员函数:

std::cout.write(reinterpret_cast<const char*>(&x), sizeof x);

请注意,您通常希望使用以二进制模式打开的流来执行此操作。

答案 2 :(得分:4)

尝试:

int x = 5;
std::cout.write(reinterpret_cast<const char*>(&x),sizeof(x));

注意:以二进制格式写入数据是不可移植的 如果您想在另一台机器上阅读它,您需要具有完全相同的架构,或者您需要标准化格式并确保所有机器都使用标准格式。

如果要编写二进制文件,标准化格式的最简单方法是将数据转换为网络格式(htonl()&lt; - &gt; ntohl()等有一组函数)

int x = 5;
u_long  transport = htonl(x);
std::cout.write(reinterpret_cast<const char*>(&transport), sizeof(u_long));

但最易于传输的格式是转换为文本。

std::cout << x;

答案 3 :(得分:2)

这是怎么回事?

int x = 5;
cout<<(char) ((0xff000000 & x) >> 24);
cout<<(char) ((0x00ff0000 & x) >> 16);
cout<<(char) ((0x0000ff00 & x) >> 8);
cout<<(char) (0x000000ff & x);

答案 4 :(得分:1)

一些提示。

首先,在0到2 ^ 32 - 1之间,你需要一个无符号四字节int。

其次,从x(&amp; x)地址开始的四个字节已经有你想要的字节。

这有帮助吗?