我正在尝试从二进制文件读取单个字节,并且我得到的结果不准确。
这是二进制文件的内容:
00000000 00 04 0A 07 00 00 00 00 00 00 74 00 00 00 00 61 69 6E 62 6F 77 00 ..........t....ainbow.
关键是我可以读取多个字节,但我只能读取一个字节。如果尝试读取等于0A
的第三个字节10
,则它会给我一个值32522
或十六进制7F0A
。我在这里缺少什么?
#include <iostream>
#include <fstream>
#include <cstring>
#include <fstream>
using namespace std;
int main()
{
fstream file("foo.daf", ios::in | ios::out | ios::binary);
file.seekg(2);
int x;
file.read(reinterpret_cast<char *>(&x), 1);
cout<<x<<endl;
return 0;
}
答案 0 :(得分:8)
x
未初始化,并且您只修改了它的一个字节,因此您对其他字节有垃圾。
直接使用正确的类型可以解决您的问题(并避免演员)。
char x;
答案 1 :(得分:6)
您正在寻找以下代码:
unsigned char x;
file.read(&x, 1);
cout << static_cast<int>(x) << endl;
它读入一个字符,然后将其转换为整数。
答案 2 :(得分:2)
问题是你正在读一个int。 Int在几乎所有系统上都是多个字节。 Int通常是4个字节,有时是8个字节。你之前的评论说,你真的想读一个字母。
int main()
{
fstream file("foo.daf", ios::in | ios::out | ios::binary);
file.seekg(2);
char x;
file.read((&x), 1);
cout<<x<<endl;
return 0;
}