冲冲冲S 2021-11-01 10:41 采纳率: 75%
浏览 49
已结题

leetcode解决实际问题,LENGTH 怎么求出来?

LENGTH的数据格式如下表所示。

img

 LENGTH共2个字节,由LENID和LCHKSUM组成,LENID表示INFO项的ASCII码字节数,当LENID=0时,INFO为空,即无该项。LENGTH传输中先传高字节,再传低字节,分四个ASCII码传送。
校验码的计算:D11D10D9D8+D7D6D5D4+D3D2D1D0,求和后模16的余数取反加1

例如:
INFO项的ASCII码字节数为18,即LENID = 0000 0001 0010。
D11D10D9D8+D7D6D5D4+D3D2D1D0 = 0000 + 0001 + 0010 = 0011,模16余数为0011H,0011H取反加1(补码)就是1101H,即LCHKSUM为1101H。
可得:
LENGTH为 1101 0000 0001 0010,即D012H

  • 写回答

1条回答 默认 最新

  • 冰思雨 2021-11-01 12:11
    关注
    
    public class LeetCode {
    
        private final byte chkSum;
        private final short lenId;
    
        public LeetCode(short value) {
            this.lenId = (short) (value & 0x0FFF);
            this.chkSum = (byte) ((~((( (value >>> 8) & 0x0F) + ((value >>> 4) & 0x0F) + (value & 0x0F)) % 16) + 1) & 0x0F);
        }
    
        public byte getChkSum(){
            return chkSum;
        }
    
        public short getLenId() {
            return lenId;
        }
    
        public short getValue() {
            return (short) (chkSum << 12 | lenId);
        }
    
        private String toBinaryString() {
            return String.format("%04d %04d %04d %04d",
                    Integer.parseInt(Integer.toBinaryString(getChkSum())),
                    Integer.parseInt(Integer.toBinaryString(getLenId()>>>8)),
                    Integer.parseInt(Integer.toBinaryString((getLenId() >>> 4) & 0x0F)),
                    Integer.parseInt(Integer.toBinaryString(getLenId() & 0x0F)));
        }
    
        public String toHexString() {
            return Integer.toHexString(getValue() & 0xFFFF);
        }
    
        @Override
        public String toString() {
            return toHexString().toUpperCase() + "H";
        }
    
        public static void main(String[] args) {
            LeetCode leetCode = new LeetCode(Short.parseShort("000000010010", 2));
            System.out.println(Integer.toBinaryString(leetCode.getChkSum()));
            System.out.println(Integer.toBinaryString(leetCode.getLenId()));
            System.out.println(leetCode.toBinaryString());
            System.out.println(leetCode);
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月10日
  • 已采纳回答 11月2日
  • 修改了问题 11月1日
  • 创建了问题 11月1日

悬赏问题

  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图
  • ¥15 关于#DMA固件#的问题,请各位专家解答!
  • ¥15 matlab生成的x1图不趋于稳定,之后的图像是稳定的水平线
  • ¥15 请问华为OD岗位的内部职业发展通道都有哪些,以及各个级别晋升的要求
  • ¥20 微信小程序 canvas 问题
  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验