int x = 5;
cout<<(char)x;
上面的代码在原始二进制文件中输出一个int x,但只有1个字节。我需要它做的是输出x作为二进制4字节,因为在我的代码中,x可以是0到2 ^ 32-1之间的任何地方,因为
cout<<(int)x;
没有诀窍,我该怎么做?
答案 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)地址开始的四个字节已经有你想要的字节。
这有帮助吗?