C++ 将文件中的字节转换为整数c++;

C++ 将文件中的字节转换为整数c++;,c++,parsing,byte,C++,Parsing,Byte,我正试图解析一个.dat文件,用此代码逐字节读取它。(文件名在arv[1]中) std::ifstream是(arv[1],std::ifstream::binary); 如果(是){ is.seekg(0,is.end); int length=is.tellg(); is.seekg(0,is.beg); 字符*缓冲区=新字符[长度]; is.read(缓冲区、长度); 如果(是) 标准::cout代替: char * buffer = new char [length]; is.read

我正试图解析一个
.dat
文件,用此代码逐字节读取它。(文件名在arv[1]中)

std::ifstream是(arv[1],std::ifstream::binary);
如果(是){
is.seekg(0,is.end);
int length=is.tellg();
is.seekg(0,is.beg);
字符*缓冲区=新字符[长度];
is.read(缓冲区、长度);
如果(是)
标准::cout代替:

char * buffer = new char [length];
is.read (buffer,length);
您可以使用:

int numIntegers = length/sizeof(int);
int* buffer = new int[numIntegers];
is.read(reinterpret_cast<char*>(buffer), numIntegers*sizeof(int));

首先,内存泄漏,动态分配字符数组,但从不删除它们。 改用
std::string

std::string buffer(length,0);
is.read (&buffer[0],length);
现在,假设已正确写入整数,并已将其正确读入缓冲区,则可以使用此字符数组作为指向整数的指针:

int myInt = *(int*)&buffer[0];
(你明白为什么吗?) 如果存储了多个整数:

std::vector<int> integers;
for (int i=0;i<buffer.size();i+=sizeof(int)){
 integers.push_back(*(int*)&buffer[i]);
}
std::向量整数;

对于(int i=0;ifor(int i=0;i向量
作为RAII缓冲比使用
字符串
更有意义。在C++11之前,无法保证字符串具有连续存储。
int myInt = *(int*)&buffer[0];
std::vector<int> integers;
for (int i=0;i<buffer.size();i+=sizeof(int)){
 integers.push_back(*(int*)&buffer[i]);
}