2011-06-21 85 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/ –