Read 32-bit integer from binary file in C++?

前端 未结 2 864
梦毁少年i
梦毁少年i 2021-01-01 20:13

My binary file looks like this.

00000000: 0000 0803 0000 ea60 0000 001c 0000 001c
00000010: 0000 0000 0000 0000 0000 0000 0000 0000

left co

相关标签:
2条回答
  • 2021-01-01 20:27

    Open file in binary mode and then use read() method, something like:

    uint32_t a;
    ifstream file ("file", ios::in | ios::binary);
    if (file.is_open())
    {
         file.read ((char*)&a, sizeof(a));
    }
    
    0 讨论(0)
  • 2021-01-01 20:47

    You have two issues:

    1. Insuring you read the bytes you intend (no fewer, no more) from the stream.

      I'd recommend this syntax:

      uint32_t a;

      inFILE.read(reinterpret_cast<char *>(&a), sizeof(a));

    2. Insure you're interpreting those bytes with the correct byte order.

      Q: If you're on a PC, your CPU is probably little endian. Do you know if your data stream is also little-endian, or is it big endian?

      If the data is big-endian, I'd consider the standard networking functions to accomodate byte order: ntohl(), etc: http://www.retran.com/beej/htonsman.html

    ALSO:

    Follow Hcorg's and Daniel Jour's advice: don't forget about the "open mode" parameter, and don't forget to check for "file open" errors.

    0 讨论(0)
提交回复
热议问题