当前位置: 首页 > 知识库问答 >
问题:

C#中用于DECT的CRC 16

严景焕
2023-03-14

在C语言中也有一个类似的问题被问到和回答,但我在C#中遇到了一些困难。

我有48位数据,现在我需要生成16位CRC,下面是代码:

  private bool[] MakeCRC(string BitString)
    {
        bool[] Res = new bool[17];  
        bool[] CRC = new bool[16];
        int i;
        bool DoInvert= false;

        for (i = 0; i < 16; ++i) // Init before calculation
            CRC[i] = false;

        for (i = 0; i < BitString.Length; ++i)
        {
            if (BitString[i] == '1')
                DoInvert = true ^ CRC[15];

            //DoInvert = ('1' == BitString[i]) ^ CRC[15]; // XOR required?

            CRC[15] = CRC[14];
            CRC[14] = CRC[13];
            CRC[13] = CRC[12];
            CRC[12] = CRC[11];
            CRC[11] = CRC[10];
            CRC[10] = CRC[9] ^ DoInvert;
            CRC[9] = CRC[8];
            CRC[8] = CRC[7] ^ DoInvert;
            CRC[7] = CRC[6] ^ DoInvert;
            CRC[6] = CRC[5];
            CRC[5] = CRC[4];
            CRC[4] = CRC[3];
            CRC[3] = CRC[2] ^ DoInvert;
            CRC[2] = CRC[1];
            CRC[1] = CRC[0];
            CRC[0] = DoInvert;
        }

        for (i = 0; i < 16; ++i)
            Res[15 - i] = CRC[i] ? true : false;

        Res[16] = false; // Set string terminator

        return (Res);

    }

但是上面的代码,给了我错误的输出,请建议我如果有什么更好的方法做它。

编辑:

共有1个答案

金伟
2023-03-14

取消注释DoInvert=('1'==bitstring[i])^CRC[15];去掉上面的线,它就工作了。

您对注释行的替换是错误的。正确的做法是:

if (BitString[i] == '1')
    DoInvert = true ^ CRC[15];
else
    DoInvert = false ^ CRC[15];
 类似资料:
  • 本文向大家介绍基于C++中setiosflags()的用法详解,包括了基于C++中setiosflags()的用法详解的使用技巧和注意事项,需要的朋友参考一下 cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2); setiosflags 是包含在命名空间iomanip 中的C++ 操作符,该操作符的作用是执

  • 本文向大家介绍tan()函数,用于C ++中的复数,包括了tan()函数,用于C ++中的复数的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将讨论C ++ STL中复数的工作原理,语法和函数示例。 tan()用于复数是<complex>头文件下的函数。此函数用于查找与其关联的复数的切线。此功能是<cmath>头文件下的simple的复杂版本。 什么是复数? 复数是由实数和虚数组成的数字。

  • 我试图使用C# DI方法来实现一些东西。以下是我的代码片段。 以及创建ServiceLocator的代码: 现在,我用创建一个测试代码 但看起来,我总是得到函数返回的。相反,我希望通过函数获取object,那么如何正确地实现呢?

  • 问题内容: 我想将Java中的类转换为C#,大部分更改已经完成,但是我不确定这部分。我想转换以下代码行: 我已经试过了: 但是它不能正常工作,因为GetBytes()期望翻倍。我不确定将其转换为双精度是否可以解决问题,所以我想在这里询问。 问题答案: 根据您的编码,您可以执行以下操作: 有关参考,请参见http://msdn.microsoft.com/zh- cn/library/ds4kkd5

  • 有没有办法使用MinGW作为MS Visual C++的替代品?很多Python包都需要VS C++才能安装:4.5GB的磁盘空间!MinGW只需要450 MB,就可以达到编译C/C++的目的。 我使用的是Visual Studio代码,我尽量避免在3)-->中建议的Microsoft Visual C++安装,您也可以只安装C++构建工具:https://Code.visualstudio.co