C++打印出 vector 的位集<unsigned char>

标签 c++ vector binary double printf

我正在将 double 值复制到 unsigned char 的 vector 中。这将是我的套接字缓冲区,它应该包含不同类型的值。 我想测试应对是否正确。我写了一个小代码。

vector<unsigned char> buffer(8);
double doubleValue_1 = 8.0;
memcpy(&buffer[0], &doubleValue_1, sizeof( doubleValue_1));

bitset<64>bitset_1(doubleValue_1);
cout << "doubleValue_1: " << bitset_1 << endl;

cout << "buffer: ";
for (int i = 0; i < buffer.size(); i++) {
    bitset<8>bitset_v(buffer.at(i));
    cout << bitset_v;
}

cout << endl << endl;

double doubleValue_2;
memcpy(&doubleValue_2, &buffer[0], sizeof(doubleValue_2));

bitset<64>bitset_2(doubleValue_2);
cout << "doubleValue_2: " << bitset_2 << endl;

我得到了输出:

doubleValue_1: 0000000000000000000000000000000000000000000000000000000000001000
buffer:        0000000000000000000000000000000000000000000000000010000001000000
doubleValue_2: 0000000000000000000000000000000000000000000000000000000000001000

怎么看,第一个doubleValue_1代表8.0。比我将这个值复制到 vector 。并且输出不等于前一个。但是,当我将字节从 vector 处理到双倍返回时,我在 doubleValue_2 中得到了与 doubleValue_1 中相同的值。 我的问题是,为什么 vector 的输出与 double 的不同?也许我以错误的方式打印出 vector 。你能建议我如何正确地做到这一点吗? 非常感谢。

最佳答案

bitset<64>bitset_1(doubleValue_1);正在类型转换你的 doubleunsigned long (因为这就是 bitset<64> constructor 需要的。)

同样适用于 bitset<64>bitset_2(doubleValue_2); .

两者都没有真正以 double 的位表示结束。 .

关于C++打印出 vector 的位集<unsigned char>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6429115/

相关文章:

c++ - 使用 pimpl 习惯用法时如何创建私有(private)静态常量字符串

c++ - 在 add_options() 之后更改 boost::program_options 中的值语义。 IE。默认值

java - Java类Stack继承自Vector有哪些负面影响?

Perl:将二进制数编码为base64

c++ - c++ 中的分数表示

c++ - C++ 中的枚举器有自动名称查找吗?

c++ - 如何杀死用C++创建的分离线程

javascript - ECMAScript 6 负二进制文字

c++ - 调用 C++ vector 的每个元素的成员函数

CRTP 共享指针的 C++ vector