Java实现RS485 CRC校验位计算

96 阅读1分钟

这里用于计算锁控制器的命令

import java.util.ArrayList;
import java.util.List;

public class LockCommandCalculation {

    public static void main(String[] args) {
        List<String[]> datas = new ArrayList<>();
        for (int i = 1; i <= 24; i++) {
            String[] chars = {"0x8a", "0x01", "0x01", "0x11"};
            // 十进制转十六进制
            String hexStr = "0x" + (Integer.toHexString(i).length() == 1 ? "0" + Integer.toHexString(i) : Integer.toHexString(i));
            chars[2] = hexStr;
            datas.add(chars);
        }

        for (String[] data : datas) {
            int result = Integer.parseInt(data[0].substring(2), 16);
            for (int i = 0; i < data.length - 1; i++) {
                result = result ^ Integer.parseInt(data[i + 1].substring(2), 16);
            }
            StringBuffer stringBuffer = new StringBuffer();
            for (String hex : data) {
                stringBuffer.append(hex.substring(2).toUpperCase()).append(" ");
            }
            stringBuffer.append(Integer.toHexString(result).toUpperCase());
            System.out.println(stringBuffer);
        }
    }
}

计算结果:

微信图片_20231007195723.jpg

命令解释: image.png