gpt4 book ai didi

JAVA CRC16 函数返回 3 个字符响应而不是 4 个字符

转载 作者:太空宇宙 更新时间:2023-11-04 06:51:11 29 4
gpt4 key购买 nike

我有一个如下所示的 Java CRC16 函数,我需要它返回 4 长度的字母数字结果。但有时它只返回 3 长度的字母数字。为什么?我将此 CRC 与计算 CRC 的 C 应用程序进行交叉比较,通常它是相同的 CRC,但 JAVA 有时会返回 3 个字符的结果,从而引发异常。为什么?

int crrc = 0xFFFF;          // initial value
int polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)

String str = "0009";

byte []by = x; // x is the byte array from args
for (byte b : by) {
for (int i = 0; i < 8; i++) {
boolean bit = ((b >> (7-i) & 1) == 1);
boolean c15 = ((crrc >> 15 & 1) == 1);
crrc <<= 1;
if (c15 ^ bit) crrc ^= polynomial;
}
}

crrc &= 0xffff;
System.out.println(crrc);
System.out.println("CRC16-CCITT = " + Integer.toHexString(crrc) + " " + Integer.toHexString(crrc).length());

最佳答案

您可能会收到ArrayIndexOutOfBoundException,因此我认为十六进制值的最高有效半字节可能为零。尝试找出这些值(x)并检查是否 (x >>> 12) == 0(x & 0xf000) == 0。如果返回 true,您可以从左侧填充必要数量的 0

一种可能的方式:String.format("%04d", crrc)

关于JAVA CRC16 函数返回 3 个字符响应而不是 4 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23288630/

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