代码之家  ›  专栏  ›  技术社区  ›  Naveen

在C语言中从二进制文件读写整数++

  •  -1
  • Naveen  · 技术社区  · 9 年前

    尝试编写一个简单的程序,将整数值写入文件,然后按写入顺序读取和显示整数。写入文件的整数为{0,2,….18}。代码如下:

    // Example program
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <stdlib.h>
    #include <stdio.h>
    #include <fstream>
    using namespace std;
    
    int main()
    {
        typedef unsigned int uint32_t;
        // Write to file
        std::ofstream osObj;
        string filename = "testFile";
        osObj.open(filename.c_str(), std::ofstream::binary);
    
        for (uint32_t i=0; i<10; ++i)
        {
            uint32_t a = i*2;
            osObj.write(reinterpret_cast<const char *>(&a), sizeof(a));
            //osObj.write((char *)(&a), sizeof(a));
        }
    
        //read from file
        std::ifstream isObj;
        isObj.open(filename.c_str(), std::ofstream::binary);
        if (isObj.fail()) { cout<<"Failed to open file"<<endl; }
    
        for (uint32_t i=0; i<10; ++i)
        {
            char val[sizeof(uint32_t)];
            isObj.read(val, sizeof(val));
            uint32_t* valUint = reinterpret_cast<uint32_t *>(val);
            cout<<*(valUint)<<endl;
        }
        return 0;
    }
    

    这并没有产生预期的结果。我得到以下输出:

    62586880
    62586880
    62586880
    62586880
    62586880
    62586880
    62586880
    62586880
    62586880
    62586880
    

    字节顺序为小端。我错过了什么?

    1 回复  |  直到 9 年前
        1
  •  2
  •   Barmar    9 年前

    i 到 valUint . 您只能将一个整数读入 val 估值 . 它不是整数数组,因此没有理由索引指针。

        cout<< *valUint << endl;
    

    for (unint32_t i = 0; i < 10; ++i) {
        uint32_t val;
        isObj.read(reinterpret_cast<char *>&val, sizeof val);
        cout << val << endl;
    }
    

    还有,你应该这样做 osObj.close()