首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LRC -来自sting的纵向冗余校验

LRC -来自sting的纵向冗余校验
EN

Stack Overflow用户
提问于 2018-08-03 16:08:38
回答 1查看 251关注 0票数 0

我必须从以下位置提取LRC:"02 02 30 30 30 31 30 30 1c 35 32 33 1c 1c 2b 30 1c 39 34 36 1c 1c 1c 30 30 1c 1c 1c 03“核心答案必须是:”3B“

我测试了下面的代码,但结果是错误的。

代码语言:javascript
复制
    public static byte calculateLRC(byte[] bytes)
    {
        int LRC = 0;
        for (int i = 0; i < bytes.Length; i++)
        {
            LRC -= bytes[i];
        }
        return (byte)LRC;
    }

    private static byte calculateLRC2(byte[] b)
    {
        byte lrc = 0x00;
        for (int i = 0; i < b.Length; i++)
        {
            lrc = (byte)((lrc + b[i]) & 0xFF);
        }
        lrc = (byte)(((lrc ^ 0xff) + 2) & 0xFF);
        return lrc;
    }

    public static char CalculateLRC3(string toEncode)
    {
        byte[] bytes = Encoding.ASCII.GetBytes(toEncode);
        byte LRC = 0;
        for (int i = 0; i < bytes.Length; i++)
        {
            LRC ^= bytes[i];
        }
        return Convert.ToChar(LRC);
    }

    public static byte calculateLRC4(byte[] bytes)
    {
        return bytes.Aggregate<byte, byte>(0, (x, y) => (byte)(x ^ y));
    }

我在等你的回复,谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-08-03 16:12:59

看一下Wikipedia article for LRC,它说LRC的伪代码是

代码语言:javascript
复制
Set LRC = 0
For each byte b in the buffer
do
    Set LRC = (LRC + b) AND 0xFF
end do
Set LRC = (((LRC XOR 0xFF) + 1) AND 0xFF)

这看起来类似于您的calculateLRC2函数,但是您正在执行的是+ 2,而不是上面规定的+ 1。这可能是问题所在吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51668047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档