我需要对数组/数据包中保存的字节进行一些数学运算(+, - 和mod)。实际上,我需要使用一些特定的ck规则(数据包中所有字节的总和 - > sum mod 100(256 in dec。) - > FD-mod)为数据包创建校验和。问题是整数中的所有自动java转换都会产生错误的结果(手动检查)。
我该怎么做?
编辑: 谢谢你的答案! 添加了一些快速测试代码(抱歉,但我无法发布原始代码)。
我刚刚在for-cycle中添加了0xFF掩码,ck是正确的,但另一个输出是错误的。如果你想给我一些提示,我就在这里:D准备好学习!
感谢
输入:
input byte[] packet = {(byte)0x80, (byte)0x11, (byte)0x30, (byte)0x02, (byte)0x46, (byte)0x56, (byte)0x57, (byte)0x30, (byte)0x38, (byte)0x30,
(byte)0x35, (byte)0x45, (byte)0x52, (byte)0x00};
ck计算器方法:
byte ckCalculator(byte[] b) {
int len = b.length;
int sum = 0;
for(int i=0; i<len; i++) {
sum = sum + b[i]&0xFF;
}
System.out.println(String.format("%02X ", sum));
int module = sum % 256;
System.out.println(String.format("%02X ", module));
int diff = 253 - module;
byte ck = (byte)diff;
System.out.println(String.format("%02X", ck));
return ck;
}
输出: 总和:1A 模块:1A ck:E3
预期产量: 总和:31A 模块:1A ck:E3
答案 0 :(得分:1)
圆括号;)。
sum = sum + (b[i] & 0xFF);
或更好
sum += b[i] & 0xFF;
顺便说一句
System.out.println(String.format("%02X ", sum));
可以写成:(注意换行的%n)
System.out.printf("%02X %n", sum);