【发布时间】:2018-11-19 09:16:26
【问题描述】:
我正在尝试从二进制文件中读取一个 little-endian 十六进制字符串,并将该值放入一个整数中以使用它。当我尝试阅读时,我得到的是 ascii 符号,而不是数字。我试过演员和atoi,似乎没有任何效果。使用 fstream 将十六进制字符串从文件读入整数的最佳方法是什么?
这基本上是我的程序:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char* argv[]) {
fstream input;
fstream output;
char cbuffer[4];
char revbuffer[8];
input.open(argv[1], fstream::binary | fstream::in);
output.open("output.txt", ios::out | ios::app);
input.seekg(16, input.beg);
input.read(cbuffer, 4);
cout << sizeof(revbuffer) << endl;
cout << cbuffer[0] << cbuffer[1] << cbuffer[2] << cbuffer[3] << endl;
}
【问题讨论】:
-
该值是否真的以十六进制字符串形式存储在文件中?您提到了字节顺序,并且从文件中读取了 4 个字符,因此十六进制字符串似乎不太可能。
-
也许不是,我真的不知道怎么称呼它。我对编程相当陌生。该值位于偏移量 0x10 处,类似于 [in hex] 00 92 f8 03。该数字应为 0x03f89200。
标签: c++ input hex fstream atoi