VB.NET十六进制字符串转Base64结果不匹配问题如何解决
问题根因
你当前的错误是直接将十六进制字符串的每个字符当做普通UTF8文本转成字节数组,再进行Base64编码,本质是对十六进制字符串本身做了Base64转码,而非对十六进制代表的原始二进制数据转码。正确逻辑需要先把十六进制字符串解码为对应的原始字节数组,再对字节数组做Base64编码。
调整后代码
兼容.NET 3.5/4.6通用版本
自己实现十六进制转字节数组的方法,兼容所有版本的.NET框架:
' 十六进制字符串转原始字节数组工具方法 Public Function HexStringToBytes(hexStr As String) As Byte() Dim byteCount As Integer = hexStr.Length \ 2 Dim result(byteCount - 1) As Byte For i = 0 To byteCount - 1 result(i) = Convert.ToByte(hexStr.Substring(i * 2, 2), 16) Next Return result End Function ' 业务调用代码 Dim QrCodeHex As String = "010c426f6273205265636f726473020f3331303132323339333530303030330314323032322d30342d32355431353a33303a30305a0407313030302e303005063135302e3030" Dim QrCodeBase64En As String = Convert.ToBase64String(HexStringToBytes(QrCodeHex))
.NET 4.0及以上简化版本(适用于VS2019 .NET 4.6环境)
可以直接用框架内置的SoapHexBinary类完成十六进制转字节数组,无需自己写转换逻辑:
Dim QrCodeHex As String = "010c426f6273205265636f726473020f3331303132323339333530303030330314323032322d30342d32355431353a33303a30305a0407313030302e303005063135302e3030" Dim hexBytes = System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary.Parse(QrCodeHex).Value Dim QrCodeBase64En As String = Convert.ToBase64String(hexBytes)
结果验证
以上代码运行后输出的Base64结果和你预期的一致:
AQxCb2JzIFJlY29yZHMCDzMxMDEyMjM5MzUwMDAwMwMUMjAyMi0wNC0yNVQxNTozMDowMFoEBzEwMDAuMDAFBjE1MC4wMA==
内容的提问来源于stack exchange,提问作者SAIJAN KP
相关产品推荐
相关产品推荐

