簡體   English   中英

在C ++中讀取二進制文件

[英]Reading binary files in C++

我正在嘗試編寫一個使用C ++讀取二進制文件的程序。 我遇到了一些我希望獲得幫助的異常輸出。

我有一個以這4個字節開頭的二進制文件:

A1 B2 C3 D4(使用hexdump -C驗證)

這是我用來讀取這4個字節的代碼:

#include <iostream> // for reading and writing files
#include <fstream>

using namespace std;

char * buffer;
unsigned int LENGTH = 4;

int main(int argc, char ** argv)
{
    // open the binary file
    ifstream infile ("dump", ios::binary | ios::in);

    // create a buffer
    buffer = new char[LENGTH];

    // read LENGTH bytes from the file
    infile.read(buffer, LENGTH);

    // append the null byte to terminate the string
    buffer[LENGTH] = '\0';

    // loop over the 4 bytes read, and print
    for(int i = 0; i < LENGTH; i++)
    {
       printf("Buffer[%d] is %X\n", i, buffer[i]);
    }

    delete[] buffer;
    infile.close();


    return 0;
}

該程序為我提供了這些實際結果:

Buffer[0] is FFFFFFA1
Buffer[1] is FFFFFFB2
Buffer[2] is FFFFFFC3
Buffer[3] is FFFFFFD4

但是,我希望得到以下結果:

Buffer[0] is A1
Buffer[1] is B2
Buffer[2] is C3
Buffer[3] is D4

誰能向我解釋3 0xFF字節來自何處? 它似乎只影響文件的前4個字節,隨后的4個字節按預期方式打印出來,而不添加任何0xFF字節。

作為變量參數傳遞時,默認提升char buffer[i] 要獲得正確的值,請說static_cast<unsigned char>(buffer[i])

而且, buffer[LENGTH]超出范圍,因此行為不確定。

您無法讀取LENGTH的內容的字節, 在偏移終止LENGTH的大小的緩沖區LENGTH 這是一個錯誤的錯誤。

buffer = new char[LENGTH];

這為您提供了LENGTH字符的空間,其索引為0到LENGTH - 1 所以這:

buffer[LENGTH] = '\0';

在分配的內存之外進行寫操作,從而調用未定義的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM