gpt4 book ai didi

c# - 将 CRC 函数从 C++ 转换为 C#

转载 作者:行者123 更新时间:2023-11-28 00:11:31 25 4
gpt4 key购买 nike

我正在尝试从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com