如何在C ++中读取二进制文件中的一个字节

时间:2014-12-30 01:03:09

标签: c++ file binary byte

我正在尝试从二进制文件读取单个字节,并且我得到的结果不准确。

这是二进制文件的内容:

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

3 个答案:

答案 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;
}