簡體   English   中英

使用write()將無符號字符寫入二進制文件

[英]Writing unsigned chars to a binary file using write()

我正在制作一個讀取二進制文件的程序。 因此,我將單個字節讀入無符號字符(實際上將數據讀取為字符並將其轉換為每個字符的無符號字符)。 現在我必須將未簽名的字符寫回二進制文件。

問題是現在我被迫在將它們轉換為字符后寫入單個字節(因為二進制文件的write()需要char * buffer)。 所以,現在我必須做以下事情:

for(int x=0; x<data_size; x++)
{
    ch=(char)data[x];
    outfile.write(&ch,1);
}

有沒有什么方法可以解決這個問題,以便在讀寫時減少I / O操作量?

你可以在指針上進行投射......

outfile.write((char *)&data[0], data_size);

讀取也可以這樣做(即只是將指針傳遞給unsigned char數組的第一個元素,將其轉換為指向char的指針)。

outfile的類型是ofstream ,對嗎? ofstream是一個typedef

typedef std::basic_ofstream<char, std::char_traits<char> > ofstream;

你需要自己的typedef

typedef std::basic_ofstream<unsigned char, std::char_traits<unsigned char> > uofstream;

接着,

uofstream outfile(...);
outfile.write(data, data_size); //no need to cast

data類型為unsigned char*unsigned char[]並且您只想將這些位寫入文件時執行指針轉換:

for(int x=0; x<data_size; x++)
{
outfile.write((char*)data + x, 1);
}

由於強制轉換會一次性刪除一個問題:

outfile.write((char*)data, data_size);

而你一下子就完成了這一切。 請注意,這超出了類型檢查的范圍,因此不是最佳解決方案。

暫無
暫無

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

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