我有以下函数用于读取大端四字(在抽象基文件 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 个编译器警告:
警告 C4293:“<<”:移位计数为负数或太大,未定义的行为
我理解为什么会出现此警告,但我似乎无法弄清楚如何正确摆脱它。我可以做类似的事情:
qT |= (unsigned long long)readb() << 56
;
这消除了警告,但没有任何其他问题,BYTE 会一直正确延长吗?也许我只是想太多了,解决方案就是这么简单。你们能帮我吗?谢谢。