3
我将double值复制到无符号字符的矢量。这将是我的socket的缓冲区,它应该包含不同类型的值。 我想测试应对的工作是否正确。我写了一个小代码。C++打印出矢量的位集<unsigned char>
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。比我将这个值复制到矢量。输出不等于前一个。但是,当我将向量中的字节加倍回来时,我得到的doubleValue_2与doubleValue_1中的值相同。 我的问题是,为什么矢量的输出不同于双倍?也许我以错误的方式打印出这个载体。你能否建议我如何正确地做到这一点? 非常感谢。
谢谢。你是对的。我发现我可以打印出双倍数据。 http://www.exploringbinary.com/displaying-the-raw-fields-of-a-floating-point-number/ –