试图修复转换警告

Trying to fix conversion warning

我收到以下错误:

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 警告?

不要重新发明轮子。已经有读取多字节二进制数据的函数: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);

试试这个:

rc |= (T)(temp << i);

(T)temp 再次提升为 int 以进行位移。