gpt4 book ai didi

java - 将 C 中的 crc8 函数转换为 Java

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:27:05 26 4
gpt4 key购买 nike

我从硬件合作伙伴那里收到了一个用 C 语言编写的 CRC 函数。他的设备发送的消息使用此代码进行签名。谁能帮我把它翻译成 Java?

int8 crc8(int8*buf, int8 data_byte)
{
int8 crc=0x00;
int8 data_bit=0x80;
while(data_byte>0)
{
if(((crc&0x01)!=0)!=((buf[data_byte]&data_bit)!=0))
{
crc>>=1;
crc^=0xCD;
}
else
crc>>=1;
data_bit>>=1;
if(!data_bit)
{
data_bit=0x80;
data_byte--;
}
}
return(crc);
}

我尝试将其转换为 Java,但结果不是我所期望的。

public static byte crc8(byte [] buf, byte data_byte)
{
byte crc = 0x00;
byte data_bit = (byte)0x80;
while(data_byte>0)
{
if(((crc&0x01)!=0)!=((buf[data_byte]&data_bit)!=0))
{
crc>>=1;
crc^=0xCD;
}
else
{
crc>>=1;
}
data_bit>>=1;
if(data_bit == 0)
{
data_bit= (byte)0x80;
data_byte--;
}
}
return crc;
}

我想这是错误:if(data_bit != 0)

编辑:

我在我的转换方法中将代码更改为字节。我从套接字接收数据,然后将其转换为字符串,从中获取字节数组。

输入示例为 16, 0, 1, -15, 43, 6, 1, 6, 8, 0, 111, 0, 0 ,49最后一个字段 (49) 应该是校验和

我也尝试了 Durandals 版本,但我的结果仍然无效。

我是这样读取数据的

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
char[] buffer = new char[14];
int count= bufferedReader.read(buffer, 0, 14);
String msg = new String(buffer, 0, count);
byte[] content = msg.getBytes();

最佳答案

if(!data_bit)

翻译成

if(data_bit == 0)

您确实需要使用字节而不是短裤。要解决使用字节时遇到的问题,请使用此

byte data_bit = (byte)0x80;

此外,正如 Mark 所说,您需要使用 >>> 而不是 >>。

关于java - 将 C 中的 crc8 函数转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19770622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com