我正在尝试以已知格式读取二进制文件。我想找到从中提取值的最有效方法。我的想法是:
方法1:将每个值读入新的char数组,然后将其转换为正确的数据类型。对于前4个字节的正整数,我将这些值相应地进行位移位并分配给以下整数。
方法2:将整个文件保留在char数组中,然后创建指向文件不同部分的指针。在下面的代码中,我尝试指向这前4个字节,并在取消引用变量“ bui”时使用reinterpret_cast将其解释为整数。
但是此代码的输出是:
11000000001100000000110000000011
3224374275
00000011000011000011000011000000
51130560
我的问题是
谢谢
#include <iostream>
#include <bitset>
int main(void){
unsigned char b[4];
//ifs.read((char*)b,sizeof(b));
//let's pretend the following 4 bytes are read in representing the number 3224374275:
b[0] = 0b11000000;
b[1] = 0b00110000;
b[2] = 0b00001100;
b[3] = 0b00000011;
//method 1:
unsigned int a = 0; //4 byte capacity
a = b[0] << 24 | b[1] << 16 | b[2] << 8 | b[3];
std::bitset<32> xm1(a);
std::cout << xm1 << std::endl;
std::cout << a << std::endl;
//method 2;
unsigned int* bui = reinterpret_cast<unsigned int*>(b);
std::bitset<32> xm2(*bui);
std::cout << xm2 << std::endl;
std::cout << *bui << std::endl;
}