当前位置: 首页 > article >正文

华为OD --- TLV解码

华为OD --- TLV解码

  • 题目
    • 独立实现
      • 理解
      • 思路
      • AC源码

题目

在这里插入图片描述

独立实现

理解

个人认为这题最大的难点就是理解题目
以测试用例举个🌰

31
32 01 00 AE 90 02 00 01 02 30 03 00 AB 32 31 31 02 00 32 33 33 01 00 CC

题目需要找到tag 31对应的value值. 示例中第一个tag值为32,由于在这里插入图片描述,所以tag31对应的length为01,00,又因为在这里插入图片描述,小端序简单来说就是和我们理解的字节序完全相反,比如一个数字是2311,那么按小端序排列就是1132.(小端序参考资料),那么tag31对应的length长度应该是01 -> 10 00 -> 00,最后合并成0001.那么对应的tag长度就是1, tag的value值完全取决于tag的长度,因为tag31的长度是1,那么value值就往后取一位就行为AE.

思路

按照题目理解 我们可以把输入流所有的tag以及对应的value值全部找出来,最后直接输出就行.题主使用的是map数据结构来保存.如题目测试用例,最后的数据结构就是

在这里插入图片描述

AC源码

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // 输入字符串个数
    const allStrLength = []
    // 保存关键字
    const tartTag = await readline();
    let TLV_code_stream = (await readline()).split(' ');

    const tagMap = new Map()
    let currentTagIndex = ''
    let currentTagValue = []


    do {
        // 取出第一个作为map的值
        currentTagIndex = TLV_code_stream.shift();
        // tag长度为两个字节
        let currentLength = TLV_code_stream.splice(0, 2).map(item => item.split('').reverse().join('')).join('').split('').reverse().join('')
        tagLength = parseInt(currentLength, 16)
        currentTagValue = TLV_code_stream.splice(0, tagLength);
        tagMap.set(currentTagIndex, {
            length: tagLength,
            value: currentTagValue
        })

    } while (TLV_code_stream.length > 0)


    // console.log(tagMap)
    console.log(tagMap.get(tartTag).value.join(' '))


})();



http://www.kler.cn/a/449376.html

相关文章:

  • 1 软件工程——概述
  • Qt笔记:网络编程UDP
  • Redis分布式锁释放锁是否必须用lua脚本?
  • C++ 面向对象编程:+号运算符重载,左移运算符重载
  • VR线上展厅的色彩管理如何影响用户情绪?
  • 学工管理系统-职校信息化管理平台
  • Go怎么做性能优化工具篇之基准测试
  • 芝法酱学习笔记(2.2)——sql性能优化2
  • 0.96寸OLED显示屏详解
  • Day1 苍穹外卖前端 Vue基础、Vue基本使用方式、Vue-router、Vuex、TypeScript
  • Python实现将series系列数据格式批量转换为Excel
  • OCR(五)linux 环境 基于c++的 paddle ocr 编译【CPU版本 】
  • 高原地区无人机巡检作业技术详解
  • 螺栓连接|结构强度与刚度评定
  • C++练习题之计算天数
  • SpringBoot3-第二篇(Web开发)
  • 使用FreeNAS软件部署ISCSI的SAN架构存储(IP-SAN)练习题
  • 物联网水文观测设备
  • 蓝桥杯物联网开发板硬件组成
  • 汽车IVI中控开发入门及进阶(41):视频播放器MPlayer
  • 单片机的内存是指RAM还是ROM
  • Android Studio Gradle Sync timeout
  • H5海康WS在线视频播放器:打造高效流畅的Web视频体验
  • BufferedWriter(废稿)
  • JUC并发编程之Thread学习笔记
  • count(1)、count(_)与count(列名)的区别?