You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:45:02