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

如何将计算CRC16的工作JavaScript代码转换为Java

沈凡
2023-03-14
js lang-js prettyprint-override">var hex = "08010000016B40D8EA30010000000000000000000000000000000105021503010101425E0F01F10000601A014E000000000000000001";

var str = '';
for (var i = 0; i < hex.length; i += 2){ 
  str += String.fromCharCode( parseInt(hex.substr(i, 2), 16) );
}

var crc = 0x0000;
var poly = 0xA001;

for (var pos = 0; pos < str.length; pos++) {
  crc ^= str.charCodeAt(pos);
  for (var i = 8; i !== 0; i--) {
    if ((crc & 0x0001) !== 0) {
      crc >>= 1;
      crc ^= poly;
    } else
      crc >>= 1;
  }
}
console.log( crc );
console.log( crc.toString(16) );

我当前在Java中的实现如下所示:

String hex = "08010000016B40D8EA30010000000000000000000000000000000105021503010101425E0F01F10000601A014E000000000000000001";
byte[] arr = Hex.decodeHex( hex );
long polynomial = 0xA001;
long crc = 0x0000;
for (byte b : arr) {
    crc ^= b;
    for (int i = 8; i != 0; i--) {
        if ((crc & 0x01) != 0) {
            crc >>= 1;
            crc ^= polynomial;
        } else {
            crc >>= 1;
        }
    }
}
System.out.println( crc ); // -37776

它不计算期望值。我做错了什么?

共有1个答案

公冶高峯
2023-03-14

将以下行从

CRC^=B

 类似资料:
  • 问题内容: 我目前正在从事一个项目,该项目的嵌入式系统通过无线电将数据发送到PC。数据包最后获得crc16校验和,并基于以下算法进行计算: 现在,我正在寻找Java中的等效语言。我已经在这里找到了一个不错的网站:http : //introcs.cs.princeton.edu/java/51data/CRC16CCITT.java.html 但这不适用于我的C代码。 是否有人能够为C和Java等

  • 我目前正在做一个项目,有一个嵌入式系统通过无线电向PC发送数据。数据包在最后得到一个crc16校验和,该校验和是基于以下算法计算的:

  • 这个示例程序是用C语言编写的。它用于生成基于CRC-16/IBM-SDLC的16位FCS编号。我正试图用Java编写相同的代码。有人能帮我做这件事或提供一些关于这件事的想法吗?我不懂C语言。 它返回34134而不是9588。

  • 问题内容: 我刚刚开始使用Java 8,并且正在使用以下代码片段: 如何将其转换为Lambda样式? 问题答案: 如果是 功能界面 ,则可以 这是您问题中其他类的存根实现的完整示例:

  • 问题内容: 我正在将Java库移植到C#。我使用的是Visual Studio 2008,因此没有停止使用的Microsoft Java语言转换助手程序(JLCA)。 我的方法是创建一个与Java库具有类似项目结构的新解决方案,然后将Java代码复制到ac#文件中,并将其逐行转换为有效的c#。考虑到我觉得Java易于阅读,两种语言之间的细微差别使我感到惊讶。 有些事情很容易移植(命名空间,继承等)

  • 这是代码 更新的答案