C++ 打印出矢量<无符号字符的位集>

c++ print out bitset of vector<unsigned char>

本文关键字:字符 gt 无符号 lt 打印 C++      更新时间:2023-10-16

我将双值复制到无符号字符的向量中。它将是我的套接字缓冲区,它应该包含不同类型的值。我想测试一下应对方式是否正确。我写了一个小代码。

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。然后我把这个值复制到矢量上。并且输出与前一个不相等。但当我将字节从向量转换为doubleback时,我得到的doubleValue_2值与doubleValue_1中的值相同。我的问题是,为什么向量的输出与二重的输出不同?也许我把矢量打印错了。你能建议我怎样才能正确地做吗?非常感谢。

bitset<64>bitset_1(doubleValue_1);正在将double强制转换为unsigned long(因为bitset<64>构造函数就是这样做的)

与CCD_ 5类似。

实际上,这两个都没有以double的比特表示结束。