2017-05-08 70 views
0

我打開一個文本文件:std :: ifstream開頭的字符是什麼?

std::ifstream in("1.txt"); 

if(in.good()) 
{ 
    char ch = 0; 

    while(!in.eof()) 
    { 
     in >> ch; 

     std::cout << std::hex << (short)ch << " "; 
    } 
} 

而且我一開始接收三個奇怪的字符:FFEF FFBB FFBF。它是什麼?

+1

請閱讀[爲什麼使用eof不好](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) –

回答

4

它看起來像一個BOM標記。 BOM標記在那裏要注意你的數據是UTF-8。請注意0​​處理像ASCII這樣的東西。

最好在這裏小心:因爲你正在像ASCII一樣處理它,當你遇到一個奇怪的字符時可能會出錯。

有關BOM標記的更多詳細信息,請參閱https://en.wikipedia.org/wiki/Byte_order_mark

+1

好spotting。我唯一的困惑是爲什麼OP說這些字節沒有出現在他們的十六進制編輯器中。除非它像我在工作中不得不使用的可怕的Perforce diff工具那樣默默地忽略物料清單。 – paddy

+1

@paddy請注意,他實際上也會將「char」投射到「short」。文件中的數據可能只是BOM標記;額外的'ff's就在那裏,因爲'char'是有符號的,並且投射會做符號擴展。例如。 0xEF將變爲0xFF 0xEF [etc] – atlaste

相關問題