c ++打印出vector <unsigned char>的bitset

M.K*_*.K. 3 c++ binary double printf vector

我将double值复制到unsigned char的向量.它将是我的socket缓冲区,它应该包含不同类型的值.我想测试应对是否正常.我写了一个小代码.

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;
Run Code Online (Sandbox Code Playgroud)

我得到了输出:

doubleValue_1: 0000000000000000000000000000000000000000000000000000000000001000
buffer:        0000000000000000000000000000000000000000000000000010000001000000
doubleValue_2: 0000000000000000000000000000000000000000000000000000000000001000
Run Code Online (Sandbox Code Playgroud)

你怎么看,第一个doubleValue_1代表8.0.比我把这个值复制到矢量.并且输出不等于前一个.但是当我从向量处理字节到双向后,我在doubleValue_2中得到的值与doubleValue_1中的值相同.我的问题是,为什么向量的输出不同于双倍?也许我以错误的方式打印出矢量.你能建议我怎么做才能正确吗?非常感谢.

Nem*_*emo 8

bitset<64>bitset_1(doubleValue_1);将你投射double到一个unsigned long(因为这是bitset<64>构造函数所需要的.)

同样的bitset<64>bitset_2(doubleValue_2);.

两个人实际上都没有用a的位表示double.