我正在一个函数,我必须转换一个3字节的数组,并返回3字节数组作为一个单一的int32。 代码如下: pbData是指向字节数组的指针。设置最重要的符号位(林特警告)
const byte bMSBitPosNeg = 0x80;
const byte bMSBNeg = 0xFF;
int32 i32Num = 0;
//Big - Endian
if (pbData != NULL)
{
if ((pbData[0] & bMSBitPosNeg) == bMSBitPosNeg) //Negative
{
i32Num |= (bMSBNeg * 0x1000000); //Force MSB to 0xFF as 3 bytes are
//converted to 4 bytes
}
i32Num |= (pbData[0] << 16);
i32Num |= (pbData[1] << 8);
i32Num |= (pbData[2]);
}
return i32Num;
输入:{0x00,0xBB,0xA3执行} 输出:48035 //正数
输入:{0xff的,0x44,0x5d} 输出:-48035 //负数
代码按预期工作,但我得到一个皮棉警告。 警告648:溢出运算的常量:'乘法'
我需要功能,但不想警告。我该如何抑制它?
在'0x1000000'常数上使用'UL'后缀 –
如果你将乘法作为相应的移位,那么它是否有意义呢?请记住,您正在使用'int',它是一种**签名的** 32位类型(在大多数平台上)。 –
一般提示:使用位时,* always *使用显式无符号数据类型。 –