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
它不计算期望值。我做错了什么?
将以下行从
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易于阅读,两种语言之间的细微差别使我感到惊讶。 有些事情很容易移植(命名空间,继承等)
这是代码 更新的答案