[英]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.