2013-07-08 37 views
1

我有一個關於putfstream.h的其他衍生產品的問題。我可以肯定的代碼的可移植性時,我想簡單地寫東西,像這樣:傳遞數值時,將函數放入fstream.h中導致C++可移植性問題

#include <fstream> 
#include <iostream> 
using namespace std; 
typedef unsigned char u8; 
int main() 
{ 
    fstream f; 
    u8 ch; 
    f.open("deneme.txt",ios::out|ios::binary); 
    f.put(129); 
    f.close(); 
    return 0; 
} 

當我寫128put功能(需要char值作爲參數的類型),我花了一個€但129,它在文本文件中沒有任何內容。我看不到,無法選擇。雖然光標出現在文件開始處,但記事本的行,列指針有趣地說1,2

所以,有些東西,但它是不可見的。另外根據教程,這與我所記得的一樣。我可以在0255之間書寫而不會出現可移植性問題。爲了確保它在所有平臺(編譯器/操作系統等)中以二進制形式正確寫入。我擔心的原因是其價值範圍可能從平臺變爲平臺的char類型。 Put函數是否存在這樣的可移植性問題,或者我是否需要長期擔心?好的,我知道該怎麼處理這個話題了。謝謝大家試圖幫助我。

+0

我看了一下這段代碼,刷新了編輯頁面。粘貼,選擇,點擊格式按鈕,完成。 – chris

+0

感謝您的更新。我會習慣它的時間:) – user2561614

+0

'ios :: binary' ...「文本文件中沒有任何內容」。那就是你的問題,就在那裏。 – MSalters

回答

1

事實上,根本沒有問題。我不知道你使用的是什麼操作系統。但是在像操作系統這樣的nix上,檢查你得到你想要的是非常簡單的。看看文件的大小我確定它會是1個字節。如果你在十六進制編輯器中打開它,你會得到值爲0x81或129的字節。

關於編輯器,一些現代編輯器可能會認爲這個129字符是UTF-8序列的開頭,它至少有兩個字節的長度,顯示錯誤的結果。另一個不現代的編輯器可能會認爲這是一些8位本地代碼,但是這種編碼可能不會描述字符129,或者此編輯器使用的字體可能不包含此類字形。這是編輯不是你的程序的問題。