【发布时间】:2023-04-08 22:09:01
【问题描述】:
即使我将每个正确的操作数都转换为 unsigned long long,警告仍然存在。 uint8_t << uint64_t 不应该有这样的隐式转换:(uint64_t) uint8_t << uint64_t?
This answer 建议我可以提升任一操作数,整个表达式将转换为 unsigned long long,但这可能是错误的。
bool dgBioReadU64LE(DgBioFile *file, uint64_t *x) {
uint8_t u[8];
if (!dgBioReadU8v(file, LEN(u), u)) return false;
*x = u[0]|(u[1]<<8ULL)|(u[2]<<16ULL)|(u[3]<<24ULL)|(u[4]<<32ULL)|(u[5]<<40ULL)|(u[6]<<48ULL)|(u[7]<<56ULL);
return true;
}
bool dgBioReadU64BE(DgBioFile *file, uint64_t *x) {
uint8_t u[8];
if (!dgBioReadU8v(file, LEN(u), u)) return false;
*x = u[7]|(u[6]<<8ULL)|(u[5]<<16ULL)|(u[4]<<24ULL)|(u[3]<<32ULL)|(u[2]<<40ULL)|(u[1]<<48ULL)|(u[0]<<56ULL);
return true;
}
【问题讨论】: