是否多余



这是我的原始函数

private static Int32 getInt(byte[] Data, char Endianness)
{
if (Data.Length > 3)
{
switch (Endianness)
{
case 'l':
return ((Int32)(Data[3]) << 24) + ((Int32)(Data[2]) << 16) + ((Int32)(Data[1]) << 8) + (Int32)(Data[0]);
case 'b':
return ((Int32)(Data[0]) << 24) + ((Int32)(Data[1]) << 16) + ((Int32)(Data[2]) << 8) + (Int32)(Data[3]);
default:
throw new ArgumentException("Wrong endianness type", "Endianness types are 'l' or 'b'");
}
}
else
{
throw new ArgumentException("NVM data corruption", "Failed to parse NVM data");
}
}

我正在使用锐化器,它建议我将转换删除到 Int32,因为它是多余的。

所以我们得到这个代码作为输出

private static int getInt(byte[] Data, char Endianness)
{
if (Data.Length > 3)
{
switch (Endianness)
{
case 'l':
return (Data[3] << 24) + (Data[2] << 16) + (Data[1] << 8) + Data[0];
case 'b':
return (Data[0] << 24) + (Data[1] << 16) + (Data[2] << 8) + Data[3];
default:
throw new ArgumentException("Wrong endianness type", "Endianness types are 'l' or 'b'");
}
}
throw new ArgumentException("NVM data corruption", "Failed to parse NVM data");
}

在您看到的代码中,我正在移动Data[2] << 16该数字可以从原始字节溢出,如果我将强制转换为 Int32,我是否会冒着在这里对字节进行某种修剪的风险?

你能解释一下C#预处理器/编译器在这里做什么吗?

谢谢

强制转换是多余的,因为当您使用运算符时left-shift编译器会自动将Data[2]提升为整数,并且该操作的结果也将是整数。因此,不会丢失任何数据。

最新更新