如何在.Net环境下创建解析TLV结构并实现Base64编码(支持Asp.net/VB.net)
VB.NET TLV编解码实现方案
以下实现完全匹配1字节Tag、1字节Length、UTF8编码Value的规则,支持TLV结构创建、解析、Base64转换功能,可直接在ASP.NET/VB.NET项目中使用。
1. TLV实体定义
' TLV项实体类,存储单条TLV数据 Public Class TlvItem ' Tag值(1字节,取值范围0-255,按业务附表赋值即可) Public Property Tag As Byte ' 字段原始字符串值 Public Property Value As String End Class
2. 核心编解码工具类实现
Imports System.Text Imports System.IO Public Class TlvHelper ''' <summary> ''' 将TLV集合编码为TLV格式字节数组 ''' </summary> ''' <param name="tlvList">待编码的TLV项集合</param> ''' <returns>编码后的TLV字节数组</returns> Public Shared Function EncodeTlv(tlvList As List(Of TlvItem)) As Byte() Using ms As New MemoryStream() Using bw As New BinaryWriter(ms) For Each tlv In tlvList ' 写入1字节Tag bw.Write(tlv.Tag) ' 计算Value的UTF8编码字节数组 Dim valueBytes = Encoding.UTF8.GetBytes(tlv.Value) ' 校验长度:1字节Length最大支持255字节的Value If valueBytes.Length > 255 Then Throw New ArgumentOutOfRangeException($"Tag={tlv.Tag}的字段值UTF8编码后长度超过255字节,不符合规则") End If ' 写入1字节Length bw.Write(CByte(valueBytes.Length)) ' 写入Value字节 bw.Write(valueBytes) Next End Using Return ms.ToArray() End Using End Function ''' <summary> ''' TLV字节数组转Base64字符串 ''' </summary> Public Shared Function TlvToBase64(tlvBytes As Byte()) As String Return Convert.ToBase64String(tlvBytes) End Function ''' <summary> ''' 从TLV字节数组解析为TLV项集合 ''' </summary> Public Shared Function DecodeTlv(tlvBytes As Byte()) As List(Of TlvItem) Dim result As New List(Of TlvItem)() If tlvBytes Is Nothing OrElse tlvBytes.Length = 0 Then Return result Using ms As New MemoryStream(tlvBytes) Using br As New BinaryReader(ms) While ms.Position < ms.Length ' 读取1字节Tag Dim tag = br.ReadByte() ' 读取1字节Length Dim length = br.ReadByte() ' 读取对应长度的Value字节 Dim valueBytes = br.ReadBytes(length) ' 转UTF8字符串 Dim value = Encoding.UTF8.GetString(valueBytes) result.Add(New TlvItem With { .Tag = tag, .Value = value }) End While End Using End Using Return result End Function ''' <summary> ''' 从Base64字符串解析为TLV项集合 ''' </summary> Public Shared Function Base64ToTlv(base64Str As String) As List(Of TlvItem) Dim tlvBytes = Convert.FromBase64String(base64Str) Return DecodeTlv(tlvBytes) End Function End Class
3. 使用示例
' 示例1:创建TLV并编码为Base64 Dim tlvList As New List(Of TlvItem) From { New TlvItem With {.Tag = &H01, .Value = "商户名称"}, New TlvItem With {.Tag = &H02, .Value = "202405010001"} } ' 编码为TLV字节数组 Dim tlvBytes = TlvHelper.EncodeTlv(tlvList) ' 转换为Base64字符串(可直接用于二维码生成) Dim qrCodeBase64 = TlvHelper.TlvToBase64(tlvBytes) ' 示例2:从二维码读取的Base64字符串解析TLV Dim decodedList = TlvHelper.Base64ToTlv(qrCodeBase64) For Each item In decodedList Console.WriteLine($"Tag:{item.Tag:X2}, 内容:{item.Value}") Next
内容的提问来源于stack exchange,提问作者Ather
相关产品推荐
相关产品推荐

