Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将CRC16计算从C转换为C#_C#_C_Crc16 - Fatal编程技术网

将CRC16计算从C转换为C#

将CRC16计算从C转换为C#,c#,c,crc16,C#,C,Crc16,我必须将CRC16计算从C转换为C,但得到的信息是,在(crc&0x8000)和返回(crc&0xFFFF) 迄今为止的守则: public unsafe short Crc16(string str) { short crc = 0; for(int i = 0; i < str.Length; i++) { crc = (crc << 1) ^ str[i] ^ ((crc & 0x8000) ? 0x1021 : 0);

我必须将CRC16计算从C转换为C,但得到的信息是,在
(crc&0x8000)
返回(crc&0xFFFF)

迄今为止的守则:

public unsafe short Crc16(string str)
{
    short crc = 0;

    for(int i = 0; i < str.Length; i++)
    {
        crc = (crc << 1) ^ str[i] ^ ((crc & 0x8000) ? 0x1021 : 0);
    }
    return (crc & 0xFFFF);
}
公共不安全短Crc16(字符串str)
{
短crc=0;
对于(int i=0;icrc=(crc在C中,
0
FALSE
是同义的,任何不是
0
的数字都是真的。()

要进行转换,请执行以下操作:

public short CalcCrc16(string str)
{
    short crc = 0;
    int i;

    unchecked
    {
        foreach(char c in str)
        {
            short exponent = (crc & 0x8000) != 0 ? 0x1021 : 0;
            crc = (crc << 1) ^ ((short)c) ^ exponent);
        }

        return (short)(crc & 0xFFFF);
    }
}
public short CalcCrc16(字符串str)
{
短crc=0;
int i;
未经检查
{
foreach(str中的字符c)
{
短指数=(crc&0x8000)!=0?0x1021:0;

crc=(crc使用原始C代码会很有帮助,该代码存在多个问题。但是,C#不会隐式地将数值视为布尔值。如果要测试某个值是否为零,则必须专门测试它。对我来说,这看起来像是一个奇怪的crc计算。看起来你没有正确地翻译它。我猜是这样的C参数是“char*”—指向字符串的指针,应该将其转换为“string”,而不是整数类型的“char”。然后“(str+i)*”变成str[i]等。需要原始代码才能获得更明确的答案。我已经更新了我的答案,以反映C代码。感谢您的帮助,但我仍然无法在
(crc
*(str+I)
上隐式地将类型“int”转换为“short”(crc
*(str+I)
str[I]
相同(不是
*str[I]
)@user5825579在C#中,这些操作返回一个
int
,因此您需要显式地将其转换为
short
。例如,最后一条语句将变成
return(short)(crc&0xFFFF)
。与循环中的赋值相同(请注意括号)。
public short CalcCrc16(string str)
{
    short crc = 0;
    int i;

    unchecked
    {
        foreach(char c in str)
        {
            short exponent = (crc & 0x8000) != 0 ? 0x1021 : 0;
            crc = (crc << 1) ^ ((short)c) ^ exponent);
        }

        return (short)(crc & 0xFFFF);
    }
}