我正在将 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);
正在类型转换你的 double
到unsigned long
(因为这就是 bitset<64>
constructor 需要的。)
同样适用于 bitset<64>bitset_2(doubleValue_2);
.
两者都没有真正以 double
的位表示结束。 .
关于C++打印出 vector 的位集<unsigned char>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6429115/