Java生成LRC纵向冗余校验

纵向冗余校验(Longitudinal Redundancy Check,简称:LRC)是通信中常用的一种校验形式,也称LRC校验或纵向校验;它是一种从纵向通道上的特定比特串产生校验比特的错误检测方法;通常Modbus协议ASCII模式采用LRC算法。

1.生成LRC校验

/**
     * 生成LRC校验值:
     *
     * 1)对需要校验的数据(2n个字符)两两组成一个16进制的数值求和;
     * 2)将求和结果与256求模;
     * 3)用256减去所得模值得到校验结果(另一种方法:将模值按位取反然后加1);
     */
     
    public static int getCalculateLRC(String data) {

        if (data.length() % 2 != 0) {
            throw new IllegalArgumentException("输入数据长度必须为偶数");
        }
        int sum = 0;
        //两两组合字符转换为十六进制数值求和
        for (int i = 0; i < data.length(); i += 2) {
            String hex = data.substring(i, i + 2);
            try {
                int value = Integer.parseInt(hex, 16);
                sum += value;
            } catch (NumberFormatException e) {
                throw new IllegalArgumentException("输入数据包含非十六进制字符", e);
            }
        }
        //求和结果与256求模
        int mod = sum % 256;
        //计算校验结果
        return 256 - mod;
    }

2.调用

ASCII字符串:900600000005
调用方法:getCalculateLRC("900600000005");
LRC校验:65
组合ASCII字符串:90060000000565

当然可以,以下是一个用C#编写的纵向冗余校验LRC,Longitudinal Redundancy Check)方法的示例代码: ```csharp using System; public class LRC { /// <summary> /// 计算纵向冗余校验码 /// </summary> /// <param name="data">要计算的数据字节数组</param> /// <returns>计算得到的LRC校验码</returns> public static byte CalculateLRC(byte[] data) { byte lrc = 0; foreach (byte b in data) { lrc ^= b; } return lrc; } /// <summary> /// 验证数据的LRC校验码 /// </summary> /// <param name="data">要验证的数据字节数组</param> /// <param name="receivedLRC">接收到的LRC校验码</param> /// <returns>如果验证通过返回true,否则返回false</returns> public static bool VerifyLRC(byte[] data, byte receivedLRC) { byte calculatedLRC = CalculateLRC(data); return calculatedLRC == receivedLRC; } // 示例使用 public static void Main(string[] args) { byte[] data = { 0x01, 0x02, 0x03, 0x04 }; byte lrc = CalculateLRC(data); Console.WriteLine("计算得到的LRC校验码: " + lrc); bool isValid = VerifyLRC(data, lrc); Console.WriteLine("LRC校验结果: " + isValid); } } ``` 这个示例代码包含两个主要方法: 1. `CalculateLRC`:计算给定数据字节数组的纵向冗余校验码。 2. `VerifyLRC`:验证接收到的LRC校验码是否与计算得到的LRC校验码一致。 在`Main`方法中,我们展示了如何使用这些方法。首先,我们计算数据的LRC校验码,然后验证该校验码是否正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YunFeiDong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值