我收到以下错误:
warning: conversion to ‘short unsigned int’ from ‘int’ may alter its value [-Wconversion]
方法
template<typename T> bool get_int(FILE* IN, T* val) {
T rc = 0;
for (size_t i = 0; i < sizeof(T) << 3; i += 8) {
int temp = getc(IN);
if (temp == EOF)
return false;
rc |= (T)temp << i;
}
*val = rc;
return true;
}
当我有行
时unsigned short foo;
get_int<unsigned short>(IN, &foo);
如何摆脱此GCC警告?
答案 0 :(得分:1)
不要重新发明轮子。已有一个函数可以读取多个字节的二进制数据:fread()
:
template<typename T>
bool get_int(FILE* f, T* val) {
return fread(val, sizeof(T), 1, f) == sizeof(T);
}
请注意,调用函数模板时不必显式指定类型 - 您可以扣除它的内容:
unsigned short foo;
get_int(IN, &foo);
答案 1 :(得分:1)
试试这个:
rc |= (T)(temp << i);
(T)temp
再次升级为int,用于按位移位。