华为机试 - TLV解析Ⅰ

news2025/8/1 18:36:07

目录

题目描述

输入描述

输出描述

用例

题目解析

算法源码


题目描述

TLV编码是按[Tag Length Value]格式进行编码的,一段码流中的信元用Tag标识,Tag在码流中唯一不重复,Length表示信元Value的长度,Value表示信元的值。

码流以某信元的Tag开头,Tag固定占一个字节,Length固定占两个字节,字节序为小端序

现给定TLV格式编码的码流,以及需要解码的信元Tag,请输出该信元的Value。

输入码流的16进制字符中,不包括小写字母,且要求输出的16进制字符串中也不要包含小写字母;码流字符串的最大长度不超过50000个字节。

输入描述

  • 输入的第一行为一个字符串,表示待解码信元的Tag;
  • 输入的第二行为一个字符串,表示待解码的16进制码流,字节之间用空格分隔。

输出描述

  • 输出一个字符串,表示待解码信元以16进制表示的Value。

用例

输入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
输出32 33
说明

需要解析的信元的Tag是31,

从码流的起始处开始匹配,

第一个信元的Tag是32,信元长度为1(01 00,小端序表示为1);

第二个信元的Tag是90,其长度为2;

第三个信元的Tag是30,其长度为3;

第四个信元的Tag是31,其长度为2(02 00),

所以返回长度后面的两个字节即可,即32 33。

题目解析

本题题目可能比较难理解,但是大概意思如下:

第二行输入的码流,是由多个信元组成的,每个信元又是由tag、len、val组成

其中tag占一个字节,len占两个字节,而val占的的字节数由len决定,因此上面用例的第二行输入如下图:

可能这样大家就一目了然了吧。 

现在要找tag为31信元的val,从上图可以看出val为32 33

算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

const lines = [];
rl.on("line", (line) => {
  lines.push(line);

  if (lines.length === 2) {
    // 待解码信元的Tag
    const tag = lines[0];

    // 待解码的16进制码流
    const stream = lines[1].split(" ");

    console.log(getResult(stream, tag));

    lines.length = 0;
  }
});

function getResult(stream, find) {
  // 这里反转数组是为了后面避免shift操作,转而使用pop操作,pop的性能更优一点
  stream.reverse();

  while (stream.length) {
    const tag = stream.pop();

    const len = parseInt(
      // 由于是小端序,因此需要反转
      [stream.pop(), stream.pop(), "0x"].reverse().join(""),
      16
    );

    const val = [];
    for (let i = 0; i < len; i++) {
      val.push(stream.pop());
    }

    if (tag === find) {
      return val.join(" ");
    }
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Canvas】JavaScript用Canvas制作美丽的对称图案

生活中有看到一个对称图案&#xff0c;看着很美&#xff0c;于是想到&#xff0c;试试用Canvas试着画对称图形来&#xff0c;想到就做&#xff0c;自己还真捣鼓出来了&#xff0c;自己弄了好多的对称图这里就不晒出来了&#xff0c;接下来讲讲怎么做&#xff0c;有兴趣的同学可…

java 自定义生成验证码

目录说明效果展示Base64编码的文件类型枚举类验证码默认常量值验证码生成工具类使用说明 项目登录或者其他重要的操作中都要生成验证码&#xff0c;其重要性在此不多说。 主要是介绍自己封装的验证码生成工具类的使用。 建议安装lombok插件,不使用此插件则需要手动生成get、s…

cron表达式,结构、字段说明、特殊字符说明、常用表达式

1.cron表达式的结构 Cron表达式是一个字符串&#xff0c;结构非常简单。Cron表达式从左到右分为6或7个字段&#xff0c;每个字段代表一个含义&#xff0c;用空格隔开。如下图所示&#xff1a; 2.cron表达式中各个字段的说明和规则 Cron一共有7位&#xff0c;最后一位是年份&…

浅析资源调度框架YARN

第一章 资源调度框架YARN理论 1.1 YARN概述 分布式操作系统 hadoop 1.xMapReduce主从架构 主节点JobTracker 从节点TaskTrackerslot hadoop 2.xMapReduce编程API YARN主从架构 主节点ResourceManager 从节点NodeManagerContainer hadoop 3.xCommonHDFS 纠删码 …

关于升级高德地图导航9.5.0的问题 ‘com.amap.api:navi-3dmap:9.5.0_3dmap9.5.0‘

最近打开项目&#xff0c;发现高德有新版本更新&#xff0c;果断更新。哈哈哈哈。然而结果好像并没有这么简单。要是世界上什么事情这么简单就好了。年轻人。还是太年轻了啊。 然后更新完最新的依赖 /*高德地图远程依赖*/implementation com.amap.api:navi-3dmap:9.5.0_3dmap9…

I/O 设备(输入/输出设备)

文章目录I/O 设备输入设备输出设备1&#xff0c;显示器2&#xff0c;打印机3&#xff0c;投影仪I/O 设备 输入设备 借助计算机的输入设备&#xff0c;用户能够轻松地将数据或者指令传递给计算机。同时&#xff0c;计算机中的 CPU 会接收用户输入的指令或数据&#xff0c;并对…

Tesla M40 下Ubuntu anaconda pycharm pytorch安装

显卡&#xff1a;Tesla M40 24GB (2张&#xff09; 显卡驱动版本(推荐)&#xff1a;470.57.02 cuda版本&#xff1a;11.4 安装前需要&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;禁用nouveau驱动&#xff01;&#xff01;&#xff01;&#xff01;&#x…

矢量网络分析仪的S11和S12参数是什么呢?

矢量网络分析仪的基础功能是S参数测试。所谓S参数&#xff0c;就是散射参数&#xff0c;是描述电磁波在被测设备的入射波量、反射波量以及波量传输特性的参数。简单理解&#xff1a;S11代表端口1的反射&#xff0c;S22代表端口2的反射&#xff0c;S21是端口1至端口2的传输&…

阿里云安装软件:jdk11

命令下载 1. 安装准备 检查系统jdk版本 java -version检查jdk自带安装包 rpm -qa | grep java卸载jdk yum -y remove tzdata-java.noarch如果有就卸载&#xff0c;卸载的包名通过&#xff08;rpm -qa | grep java&#xff09;获取&#xff0c;包名要全部输入 rpm -e --nodeps …

Kotlin基础认知 - 为何Kotlin文件有的带.kt后缀,有的不带?

有一天看到项目中的Kotlin类&#xff0c;有的有.kt后缀&#xff0c;有的没有&#xff0c;针对这个情况我就简单看了下&#xff0c;然后记录一波 创建 Kotlin Class 或 Kotlin File创建Kotlin class创建Kotlin File俩者区别展现形式外部展现内部展现延伸扩展、对向转换Class无后…

【Silvaco example】Temperature Ramping - Effect on Leakage

1、例子讲解 本示例演示了Atlas中任何device的全局温度梯度&#xff08;global temperature ramping&#xff09;的正确方法。 &#xff08;1&#xff09;结构定义 为了简单起见&#xff0c;这里选择了二极管结构。 go atlasmeshx.mesh loc0.00 spac0.05 x.mesh loc0.10 sp…

简单手段发IF=7+文章:磷酸三苯酯对鲤鱼的毒性作用及肠道微生物群落影响

研究背景 磷酸三苯基酯&#xff08;TPHP&#xff09;是一种有机磷阻燃剂&#xff0c;它通过挥发以及溶解分散到环境中&#xff0c;并通过食物链富集生物体&#xff0c;对生态系统产生不可避免的负面影响。已发现TPHP可以引起组织病变&#xff0c;干扰脂质代谢&#xff0c;并降…

全新营销时代,金融企业如何有“种”有“收”?

贯穿2022年的主题&#xff0c;就是“不确定性”。 复杂的大环境下&#xff0c;金融行业的发展饱受“震荡”。疫情、通胀&#xff0c;乃至二级市场的风云变幻&#xff0c;都在考验金融企业经营的确定性。那么&#xff0c;金融企业踏平波动、坚定前行的力量从何而来&#xff1f;…

Spring Boot 简介及快速搭建

Spring Boot 简介及快速搭建 springboot的优点&#xff1a; –快速构建一个独立的 Spring 应用程序 &#xff1b; –嵌入的 Tomcat 、 Jetty 或者 Undertow&#xff0c;无须部署 WAR 文件&#xff1b; –提供starter POMs来简化Maven配置和减少版本冲突所带来的问题&#xff1…

Vue3 setup函数的使用

全新的 setup 函数 在开始编写 Vue 组件之前&#xff0c;需要了解两个全新的前置知识点&#xff1a; 全新的 setup 函数&#xff0c;关系到组件的生命周期和渲染等问题 写 TypeScript 组件离不开的 defineComponent API setup 的含义 Vue 3 的 Composition API 系列里&#x…

计算机网络---应用层概述

&#xff08;一&#xff09;应用层概述 基本定义&#xff1a; 应用层&#xff08;Application layer&#xff09;是OSI模型的第七层。应用层直接和应用程序接口并提供常见的网络应用服务。应用层也向表示层发出请求。应用层是开放系统的最高层,是直接为应用进程提供服务的。其…

数据可视化设计经验分享:10分钟做出炫酷数据大屏

又快到年终了&#xff0c;数据大屏作为一个数据管理的分析工具&#xff0c;在年底数据大屏的制作需求日益增加。在一些公司比如银行、证券、医院、外贸等“数据大户”&#xff0c;在数据大屏的应用上更是有大量需求。 在接下来的两个月&#xff0c;许多人会感到痛苦吧&#xf…

.net---继承和多态

继承和多态继承和多态的基本概念继承继承的类型实现继承接口继承继承派生类base关键字构造函数的调用类成员的继承类成员的隐藏继承&#xff1a;虚方法和隐藏方法抽象类和抽象方法抽象类抽象方法密封类和密封方法密封类接口接口成员接口实现多态重载重写继承和多态的基本概念 …

NIO中ByteBuffer

// Invariants: mark < position < limit < capacityprivate int mark -1;private int position 0;private int limit;private int capacity; 从源码中可以看出&#xff0c;ByteBuffer的几个实例变量。我们稍后会详细解析这几个变量的意义。 在我们刚创建ByteBuff…

绿色积分消费时代来临,共享购跟随国家的号召

近年来&#xff0c;中国共享经济商业模式不断发展成熟。自2016年国家“十三五”规划纲要首次提出“共享经济”概念以来&#xff0c;中国政府不断助推共享经济发展。最新发布的《共享经济指导原则与基本框架》为共享经济作出定义&#xff1a;共享经济即“资源供给者通过平台与资…