ビッグエンディアンのクワッドワード(抽象ベースファイルI / Oクラス)を読み取るための次の関数があります。
unsigned long long File::readBigEndQuadWord(){
unsigned long long qT = 0;
qT |= readb() << 56;
qT |= readb() << 48;
qT |= readb() << 40;
qT |= readb() << 32;
qT |= readb() << 24;
qT |= readb() << 16;
qT |= readb() << 8;
qT |= readb() << 0;
return qT;
}
readb()関数はBYTEを読み取ります。使用されるtypedefは次のとおりです。
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
問題は、シフト操作で最初の4行に4つのコンパイラ警告が表示されることです。
警告C4293:'<<':シフトカウントが負または大きすぎる、未定義の動作
この警告が発生する理由は理解できますが、正しく取り除く方法がわからないようです。私は次のようなことをすることができます:
qT |= (unsigned long long)readb() << 56
;
これにより警告は削除されますが、他に問題はありません。BYTEは常に正しく拡張されますか?多分私はそれについて考えすぎていて、解決策はとても簡単です。ここで私を助けてくれませんか?ありがとう。