c++ 如何用二进制输出一个整型数?

yhqotfr8  于 2022-12-30  发布在  其他
关注(0)|答案(6)|浏览(154)
int x = 5;
cout<<(char)x;

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

cout<<(int)x;

不管用,我怎么会呢?

0tdrvxhp

0tdrvxhp1#

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

#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/

nbnkbykc

nbnkbykc2#

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

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

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

hs1rzwqc

hs1rzwqc3#

试试看:

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

注意:以二进制格式写入数据是不可移植的。
如果你想在另一台机器上阅读它,你要么需要完全相同的架构,要么需要标准化格式,并确保所有的机器都使用标准格式。
If you want to write binary the easiest way to standardise the format is to convert data to network format (there is a set of functions for that htonl() <--> ntohl() etc)

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

但是最易移植的格式是直接转换为文本。

std::cout << x;
5hcedyr0

5hcedyr04#

那这个呢?``

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

mctunoxg5#

给你点提示。
首先,要使值在0和2^32 - 1之间,需要一个 unsigned 4字节的int型。
第二,从地址x(&x)开始的四个字节已经有了你想要的字节。
有帮助吗?

qgelzfjb

qgelzfjb6#

从C++20开始,也可以使用std::format和二进制格式说明符b

#include <format>
#include <iostream>

int x = 5;
std::cout << std::format("In binary: {:b}\n", x);    // 101
std::cout << std::format("In binary: {:08b}\n", x);  // 00000101
std::cout << std::format("In binary: {:#08b}\n", x); // 0b000101

Godbolt link.

相关问题