华为OD --- TLV解码

ops/2024/12/22 15:59:53/

华为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.ppmy.cn/ops/144061.html

相关文章

uniapp navigateTo、redirectTo、reLaunch等页面路由跳转方法的区别

uni.switchTab 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 // app.json {"tabBar": {"list": [{"pagePath": "index","text": "首页"},{"pagePath": "other","text&…

【专升本】倒计时99天

2024年12月21日到2025年3月29日共有 99​ 天 一、计算机基础 1.1 计算机历史 口诀:1 雏 2 人 3 第一 4 代机器 5 趋势 1️⃣雏形——>分析机——>巴贝奇 2️⃣人——>图灵,设计了图灵机(一条无限长的纸带 & 一个读写头&…

如何利用Python爬虫获取商品历史价格信息

在电商的世界里,商品价格的波动对消费者和商家都具有重要意义。了解商品的历史价格可以帮助消费者做出更明智的购买决策,同时也为商家提供了市场趋势的重要信息。本文将详细介绍如何使用Python爬虫技术来获取商品的历史价格信息,并提供一个详…

上传文件(vue3)

使用el-upload 先上传到文件服务器&#xff0c;生成url 然后点击确定按钮&#xff1a; 保存数据 <template><el-dialog top"48px" width"500" title"新增协议" :modelValue"visible" close"handleClose()">…

【什么是事务?】

在数据库管理系统中&#xff0c;事务&#xff08;Transaction&#xff09;是执行一系列操作的最小工作单元&#xff0c;这些操作要么全部成功&#xff0c;要么全部失败。为了确保数据的一致性和完整性&#xff0c;事务被设计为具备四大特性&#xff0c;即原子性&#xff08;Ato…

金碟中间件-AAS-V10.0安装

金蝶中间件AAS-V10.0 AAS-V10.0安装 1.解压AAS-v10.0安装包 unzip AAS-V10.zip2.更新license.xml cd /root/ApusicAS/aas# 这里要将license复制到该路径 [rootvdb1 aas]# ls bin docs jmods lib modules templates config domains …

怎样衡量电阻负载的好坏

电阻负载的好坏通常通过以下几种方法来衡量&#xff1a; 1. 测量电阻值&#xff1a;最直接的方法是使用万用表来测量电阻负载的电阻值。将万用表设置在适当的电阻档位&#xff0c;然后将测试笔连接到电阻负载的两个引脚上。如果电阻负载是好的&#xff0c;那么万用表应该显示一…

配置PostgreSQL用于集成测试的步骤

在进行软件开发时&#xff0c;集成测试是确保各个组件能够协同工作的关键环节。PostgreSQL作为一种强大的开源数据库系统&#xff0c;常被用于集成测试中。下面将详细介绍如何在不同的环境中配置PostgreSQL以支持集成测试。 1. 选择并安装PostgreSQL 首先&#xff0c;你需要根…