这个示例程序是用C语言编写的。它用于生成基于CRC-16/IBM-SDLC的16位FCS编号。我正试图用Java编写相同的代码。有人能帮我做这件事或提供一些关于这件事的想法吗?我不懂C语言。
C language code:
unsigned short crcgen (data, length)
char *data; /* address of the key */
int length; /* key length */
{
unsigned char crcbytel, crcbyte2, r1;
char *ptr;
int i;
union byte_to_word
{
char bytes[2];
unsigned short ret;
} return_val;
ptr = data;
crcbyte1 = 0xFF
crcbyte2 = 0xFF
for (i=0; i<length; i++)
{
r1 = *ptr++ ^ crcbyte2;
r1 = (r1 << 4) ^ r1;
crcbyte2 = (r1 << 4) | (r1 >> 4);
crcbyte2 = (crcbyte2 & 0x0F ) ^ crcbyte1;
crcbyte1 = r1;
r1 = (r1 << 3) | (r1 >> 5);
crcbyte2 = crcbyte2 ^ (r1 & 0xF8);
crcbyte1 = crcbyte1 ^ (r1 & 0x07);
}
return_val.bytes[0] = ˜crcbyte2;
return_val.bytes[1] = ˜crcbyte1;
return(return_val.ret);
}
private static final int POLYNOMIAL = 0x8408;
private static final int PRESET_VALUE = 0xFFFF;
public static void main(String[] args) throws IOException {
// FileRead.read();
int crc = 0xFFFF; // initial value
int polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)
// byte[] testBytes = "123456789".getBytes("ASCII");
byte[] buffer = "10530237".getBytes("ASCII");
System.out.println(FileRead.crc16(buffer));
}
public static int crc16(byte[] data)
{
int current_crc_value = PRESET_VALUE;
for (int i = 0; i < data.length; i++ )
{
current_crc_value ^= data[i] & 0xFF;
for (int j = 0; j < 8; j++)
{
if ((current_crc_value & 1) != 0)
{
current_crc_value = (current_crc_value >>> 1) ^ POLYNOMIAL;
}
else
{
current_crc_value = current_crc_value >>> 1;
}
}
}
current_crc_value = ~current_crc_value;
return current_crc_value & 0xFFFF;
}
它返回34134而不是9588。
你的翻译没有问题。这是因为您没有传递正确的“两个字节和十六进制形式”参数。将缓冲区
更改为
byte[] buffer = {0x10, 0x53, 0x02, 0x37 };
顺便说一句,这可能有助于您处理字符串输入。
问题内容: 我目前正在从事一个项目,该项目的嵌入式系统通过无线电将数据发送到PC。数据包最后获得crc16校验和,并基于以下算法进行计算: 现在,我正在寻找Java中的等效语言。我已经在这里找到了一个不错的网站:http : //introcs.cs.princeton.edu/java/51data/CRC16CCITT.java.html 但这不适用于我的C代码。 是否有人能够为C和Java等
我目前正在做一个项目,有一个嵌入式系统通过无线电向PC发送数据。数据包在最后得到一个crc16校验和,该校验和是基于以下算法计算的:
问题内容: 有什么工具可以将C代码转换为Java代码?我有兴趣将此代码转换为Java: 问题答案: 您是否考虑过使用JNI来代替从C到Java的转换?
我试图将Python程序转换为C++,因为我对Python的理解稍微好一点。然而,翻译出来的代码并不起作用。有人能帮我一下吗?我试图用C++制作一个数独板,但它在中返回一些值,而不是其他位置。加上它们是无效的,并包含0。 这个程序的输出是一个二维数组,所有值都不在0,并且对数独板有效: 是一个长度为9的二维数组,在每个位置都有9个列出的语句。在这里,它们都被初始化为。 这个程序的输出也是一个二维数
问题内容: 我想创建一个包含我的类的实例变量的JSON字符串。 例如, 会成为: 我研究了几个用于创建JSON的C ++库,它们似乎都异常复杂。我想要类似Javascript的东西。换句话说,只需将std :: map传递给它并接收一个字符串。该地图可能包含其他地图,向量,列表,字符串,数字和布尔值。 最好的方法是什么? 谢谢你的帮助。 编辑 我研究了以下内容: json spirit,jsonc
我有一个C#winform应用程序,将文件保存到sqlserver数据库(2014)到VAR二进制(MAX)字段 功能保存 要检索的函数 这工作很好,现在我已经要求将数据库转换为XML,用于未连接到服务器的PC 转换为XML的函数 它工作正常,除了二进制文件,当 输出XML 当尝试将其转换回图像时,它会给我1kb的文件,字符串不是实际图像 二进制字段有特殊的转换吗? 非常感谢。 编辑问题解决感谢@