圧縮を行うためのコードに取り組んでいて、ビットストリーム クラスを作成しました。
私のビットストリーム クラスは、読み取り中の現在のビットと現在のバイト (unsigned char) を追跡しました。
istream クラスで >> 演算子と get() メソッドを使用した場合、ファイルから次の符号なし文字を読み取る方法が異なることに気付きました。
なぜ異なる結果が得られたのか不思議でした。
元:
this->m_inputFileStream.open(inputFile, std::ifstream::binary);
unsigned char currentByte;
this->m_inputFileStream >> currentByte;
対。
this->m_inputFileStream.open(inputFile, std::ifstream::binary);
unsigned char currentByte;
this->m_inputFileStream.get((char&)currentByte);
追加情報:
具体的には、私が読んでいたバイトは0x0Aでしたが、>>を使用すると0x6Fとして読み取られます
それらがどのように関連しているのかさえわかりませんか?(それらは互いに 2 の補数ではありませんか?)
ただし、 >> 演算子は unsigned char でも機能するように定義されています ( c++ istream クラス リファレンスを参照してください)。