我正在尝试从 C++ 转换此函数
BYTE serial::CalcCRC(BYTE start, const BYTE *buffer, DWORD lenght)
{
BYTE CRC = start; //...
for(DWORD count = 0 ; count < lenght ; count++) CRC += buffer[count];
return (0-CRC);
}
到 C#。 这是我的 C# 代码:
public byte CalcCRC(byte start, byte[] buffer, int length)
{
byte crc = start;
for (int i = 0; i < length; i++) crc += buffer[i];
return (0 - crc);
}
但是我在最后一行得到这个错误:
error CS0266: Cannot implicitly convert type 'int' to 'byte'. An explicit conversion exists (are you missing a cast?)
如何将上述函数转换为 C#?此外,我认为 C++ 函数在大多数情况下可能会溢出,我会在 C# 端得到相同的行为吗?
好吧,现在我认为转换可能会解决错误 - 但我的 C# 函数是否会得到与 C++ 函数相同的行为,主要是由于溢出等可能发生的行为。
最佳答案
问题是当您执行“0 - crc”时,您的原始字节被转换为整数。所以你需要做的是有最后一行
return (byte)(0-crc);
这应该可以解决问题。
它将自身“转换”为整数的原因是数值默认为整数。并执行 Integer - Byte = Integer
编辑: 关于溢出是不会发生的,但是为了避免可能出现的问题可以确保该值不超过255
所以你要做的就是进行额外的检查
if( crc + buffer[i] < Byte.MaxValue )
crc += buffer[i];
关于c# - 将 CRC 函数从 C++ 转换为 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32866208/