用字节进行数学运算

时间:2014-07-09 13:56:22

标签: java arrays byte packet checksum

我需要对数组/数据包中保存的字节进行一些数学运算(+, - 和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

1 个答案:

答案 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);