2011-06-21 66 views
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中的值相同。 我的问题是,为什么矢量的输出不同于双倍?也许我以错误的方式打印出这个载体。你能否建议我如何正确地做到这一点? 非常感谢。

回答

8

bitset<64>bitset_1(doubleValue_1);撒开你doubleunsigned long(因为那是bitset<64> constructor需要什么。)

同样,对于bitset<64>bitset_2(doubleValue_2);

两个人都没有在double的比特表示中清盘。

+0

谢谢。你是对的。我发现我可以打印出双倍数据。 http://www.exploringbinary.com/displaying-the-raw-fields-of-a-floating-point-number/ –