C++ 二进制文件读取问题

标签 c++ visual-studio file

我正在编写一个函数来读取包含一些转储数据(1 字节值的序列)的文件。由于每个转储值都是 1 个字节,所以我将它们读取为字符。我以二进制模式打开文件,以字符形式读取数据并转换为 int(因此我得到了 ascii 代码)。但是读取的数据不正确(在十六进制编辑器中进行比较)。这是我的代码:

int** read_data(char* filename, int** data, int& height, int& width)
{
    data=new int*[height];
    int row,col;
    ifstream infile;
    infile.open(filename,ios::binary|ios::in);
    if(!infile.good())
    {
        return 0;
    }
    char* ch= new char[width];
    for(row=0; row<height; row++)
    {
        data[row]=new int[width];
        infile.read(ch,width);
        for(col=0; col<width; col++)
        {
            data[row][col]=int(ch[col]);
            cout<<data[row][col]<<" ";
        }
        cout<<endl;
    }
    infile.close();
    return data;
}

知道这段代码可能有什么问题吗? 我的机器是 Windows,我使用的是 Visual Studio 2005,我传递的(确切的)文件名是:

"D:\\files\\output.dat"

编辑:如果我不使用 unsigned char,前 8 个值(均为 245)将被读取为 -11。

最佳答案

我认为,您可能必须使用 unsigned char 和 unsigned int 才能获得正确的结果。在您的代码中,您读取的字节被解释为带符号的值。我猜你不是故意的。

关于C++ 二进制文件读取问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6954853/

相关文章:

c++ - 与虚拟析构函数相比,shared_ptr 用于子类析构的运行时开销

c++ - 两个线程访问单例类 - 无法正常工作

c++ - Visual Studio 2010 - 文件夹中的文件没有 ../../Include.h

c - 在 C : How to construct a linked list in order based on a variable?

c++ - 无法读取使用相同代码在不同机器上写入的文件

c# - 覆盖文件最快的方法是什么?

c++ - std::move() 作为性能瓶颈?

c++ - 如何将 clang-tidy 集成到 CMake 和 GCC?

C#:将 "Class Library"项目用于插件

c - C 中的匿名结构