TLV解码 - 华为OD统一考试(E卷)

2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集

华为od机试

题目描述

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

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

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

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

输入描述

输入的第一行为一个字符串,表示待解码信元的Tag;

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

输出描述

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

示例1

输入:
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。

题解

题目类型:

该问题属于典型的字符串解析与编码解码问题。具体地说,它涉及对TLV编码格式的解析,利用小端序字节进行长度信息的转换,目标是从给定码流中提取出与目标Tag匹配的信元的Value值。这类问题可以归类为字节序处理与字符串匹配

解题思路:

  1. TLV格式解析:TLV编码由Tag、Length、Value组成:
    • Tag:信元标识符,固定占1个字节。
    • Length:信元长度,固定占2个字节(小端序存储)。
    • Value:信元值,长度由Length字段表示。
  2. 小端序处理:Length字段为小端序存储,需要将两个字节颠倒顺序再进行长度计算,即Length = bytes[idx+2] + bytes[idx+1]
  3. 匹配流程
    • 从码流的开头开始遍历Tag,如果找到与给定Tag相同的信元,则解析其后面的Length字节,计算Value部分并输出。
    • 每个信元的解析长度为:Tag(1字节) + Length(2字节) + Value(Length指定的字节数)
  4. 遍历过程
    • 逐步解析Tag、Length和Value,直到找到与给定Tag匹配的信元,输出其对应的Value。

时间复杂度:每个信元的解析时间是O(1),遍历码流的整体复杂度为O(n),其中n是码流的长度。由于每次遍历都会跳过已解析的信元,因此整体时间复杂度是O(n)。

空间复杂度:除了输入数据外,额外使用的空间主要是存储结果的List或数组,空间复杂度为O(n)。

Java

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;/*** @author code5bug*/
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 待解码信元的TagString tag = in.next();// 码流字符串List<String> bytes = new ArrayList<>();while (in.hasNext()) {bytes.add(in.next());}List<String> result = new ArrayList<>();int idx = 0, n = bytes.size();while (idx < n) {String t = bytes.get(idx);// 将 16 进制字符串转成 10 进制整数int len = Integer.parseInt(bytes.get(idx + 2) + bytes.get(idx + 1), 16);// 待接码的元Tag的信元值解析存入 result 中if (t.equals(tag)) {result = bytes.subList(idx + 3, idx + 3 + len);break;}idx += len + 3;}// 输出结果System.out.println(String.join(" ", result));}
}

Python

# 待解码信元的Tag
tag = input()# 码流字符串
bytes = input().split()result = []
idx, n = 0, len(bytes)
while idx < n:t = bytes[idx]# 将 16 进制字符串转成 10 进制整数length_hex = bytes[idx + 2] + bytes[idx + 1]length = int(length_hex, 16)# 待接码的元Tag的信元值解析存入 result 中if t == tag:result = bytes[idx + 3:idx + 3 + length]breakidx += length + 3# 输出结果
print(" ".join(result))

C++

#include <iostream>
#include <string>
#include <vector>using namespace std;int main() {// 待解码信元的Tagstring tag;cin >> tag;// 码流字符串vector<string> bytes;string byte;while (cin >> byte) {bytes.push_back(byte);}vector<string> result;int idx = 0, n = bytes.size();while (idx < n) {string t = bytes[idx];// 将 16 进制字符串转成 10 进制整数int len = stoi(bytes[idx + 2] + bytes[idx + 1], nullptr, 16);// 待接码的元Tag的信元值解析存入 result 中if (t == tag) {result.assign(bytes.begin() + idx + 3, bytes.begin() + idx + 3 + len);break;}idx += len + 3;}// 输出结果for (int i = 0; i < result.size(); i++) {if (i != 0) cout << " ";cout << result[i];}cout << endl;return 0;
}

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

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

相关文章

不敲一行代码!助你快速搭建属于自己的官网博客!-VitePress保姆级教程

文章目录 前言项目搭建首页修改项目配置 前言 我们在阅读官方文档时&#xff0c;经常看到一些项目的文档非常简约精美&#xff0c;并且布局高度相似&#xff0c;其实这些官网是基于vitepress搭建&#xff0c;例如&#xff1a; Vite官方文档 Vue-Use SnowAdmin 这些官网…

从零到一:如何用Ollama和OpenUI构建强大的AI模型库

搭建开源大模型平台的步骤与模型介绍 在这篇文章中&#xff0c;我将分享如何在Windows上使用Ollama和OpenUI搭建开源大模型平台的步骤&#xff0c;并介绍我所部署的几个模型及其擅长的领域。 目录 搭建开源大模型平台的步骤与模型介绍一、搭建平台步骤1. 安装Ollama2. 安装Ope…

VScode配置连接远程服务器configure ssh Hosts

VScode配置连接远程服务器&#xff0c;具体步骤 一、点击VScode左下脚这两个∟的按钮 二、点击完上面的按钮后&#xff0c;出现如下的下拉选项&#xff0c;选择“Connect to Host” 三、选择“Connect to Host”后&#xff0c;下拉选项会更新&#xff0c;选择“Configure SSH …

影刀RPA实战:java结合影刀同步采购订单数据

1.实战目标 本次实战我们用java语言结合影刀&#xff0c;实现从自用ERP系统同步订单到旺店通中&#xff0c;在工作中&#xff0c;有时候我们的运营数据不是直接在旺店通ERP中操作&#xff0c;比如我们有自己的ERP&#xff0c;完成一些特定的内部工作后&#xff0c;再把数据同步…

18937 阿克曼(Ackmann)函数

### 思路 1. **递归定义**&#xff1a;根据阿克曼函数的定义&#xff0c;使用递归来计算函数值。 2. **递归终止条件**&#xff1a; - 当 m 0 时&#xff0c;返回 n 1&#xfffd;&#xfffd; - 当 m > 0 且 n 0 时&#xff0c;返回 ackermann(m - 1, 1)。 - 当…

QT窗口无法激活弹出问题排查记录

问题背景 问题环境 操作系统: 银河麒麟V10SP1qt版本 : 5.12.12 碰见了一个问题应用最小化,然后激活程序窗口无法弹出 这里描述一下代码的逻辑,使用QLocalServer实现一个单例进程,具体的功能就是在已存在一个程序A进程时,再启动这个程序A,新的程序A进程会被杀死,然后激活已存…

Python 从入门到实战25(模块)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了类继承的相关知识。今天我们将学习一下模块的…

照片写真记录摄影作品记录网站源码

完美适应iPad&#xff0c;平板&#xff0c;手机竖屏不支持lazy&#xff0c;横屏可以&#xff0c;但建议使用平板查看效果&#xff0c; 有服务器直接上传解压使用&#xff0c;环境nginxphp&#xff0c; 没有服务器也没关系&#xff0c;可以直接使用html

模组差分包,可能是你远程升级失败的罪魁祸首!

也许我们已经习惯生活里的问题接连不断。。。但当收到客户的问题反馈&#xff0c;还是会心头一紧&#xff01; 最近有客户反馈在乡村里频繁出现掉线的情况。 我们赶紧排查&#xff1a;换货、换SIM卡&#xff0c;发现只有去年5月22号采购的那批模块在客户环境附近会出现掉线的…

开放式蓝牙耳机哪个品牌好用?行业顶尖五款开放式耳机别错过!

开放式蓝牙耳机哪个品牌好用&#xff1f;行业顶尖五款开放式耳机别错过&#xff01; 随着开放式耳机的流行&#xff0c;越来越多的用户开始青睐这种类型的耳机。尽管有些网友将开放式耳机称为“智商税”&#xff0c;但我相信&#xff0c;对于真正体验过的人来说&#xff0c;它…

基于Python的自然语言处理系列(14):TorchText + biGRU + Attention + Teacher Forcing

在前几篇文章中&#xff0c;我们探索了序列到序列&#xff08;seq2seq&#xff09;模型的基础&#xff0c;并通过使用双向GRU和上下文向量改进了模型的表现。然而&#xff0c;模型仍然依赖一个固定的上下文向量&#xff0c;这意味着它必须从整个源句中压缩信息&#xff0c;导致…

并发编程 - 锁(NSLock)

引言 在多线程编程中&#xff0c;数据一致性是一个必须解决的问题。多个线程同时访问同一片共享数据时&#xff0c;极易发生竞争条件&#xff08;race conditions&#xff09;&#xff0c;导致数据的不一致性&#xff0c;甚至程序崩溃。为了解决这些问题&#xff0c;我们需要引…

大模型备案最难材料搞定——安全评估报告、安全评估测试题【评估测试题+备案源文件】

大模型备案&#xff0c;最难搞定的2个材料&#xff0c;安全评估报告&#xff0c;安全评估测试题、拦截词&#xff0c;这里都有了 文章目录 &#xff08;一&#xff09;适用主体 &#xff08;二&#xff09;语料安全 &#xff08;三&#xff09;模型安全 &#xff08;四&…

Java_Se 数据变量与运算符

标识符、变量、常量、数据类型、运算符、基本数据类型的类型转换等。这些是编程中的“砖块”&#xff0c;是编程的基础。要想开始正式编程&#xff0c;还需要再学“控制语句”&#xff0c;控制语句就像“水泥”&#xff0c;可以把“砖块”粘到一起&#xff0c;最终形成“一座大…

2024年图纸加密防泄密软件Top10榜单 | 防止CAD图纸泄密打造坚不可摧的图纸安全

在当今数字化高速发展的时代&#xff0c;图纸作为重要的知识产权和商业机密&#xff0c;其安全问题备受关注。 一旦图纸泄露&#xff0c;可能给企业和个人带来巨大的损失。 为了保护图纸的安全&#xff0c;各种加密防泄密软件应运而生。下面为大家揭晓2024 年图纸加密防泄密软…

修复 msvcr120.dll 丢失的方法,总结几个靠谱有效的方法

1. msvcr120.dll 定义 1.1 Microsoft Visual C Redistributable Package 的一部分 msvcr120.dll 是 Microsoft Visual C 2013 Redistributable Package 的核心组件&#xff0c;该包为运行时环境提供了必要的库文件。它确保了使用 Visual C 2013 编译的应用程序能够在没有开发…

想在产品上扩展大储存怎么做?开源啦!

相比伙伴们都遇到过&#xff0c;芯片内存不够的问题&#xff1a;经常会有大量的照片、音频、文档等需要存储&#xff0c;怎么办呢&#xff1f; 我们知道可以外扩&#xff0c;要编写各种驱动&#xff0c;还有Flash替换&#xff0c;这个工程不可谓不大啊&#xff01; 但&#x…

Spring中的容器接口

容器接口 首先了解一下BeanFactory和ApplicationContext这两个接口的关系。 其实在一个 SpringBoot 项目中&#xff0c;这个 SpringBoot 项目的启动类的返回值就是一个 ApplicationContext 接口的实现类。 然后在 IDEA 中选中这个类&#xff0c;按住ctrlaltU可以查看类图&…

JavaScript 安装库npm报错

今天在编写JavaScript代码时&#xff0c;缺少了包express。 const express require(express); const app express();app.get(/, (req, res) > {res.send(Hello, world!); });app.listen(3000, () > {console.log(Server is running on port 3000); });npm install exp…