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]);
}