【问题标题】:Hex value to Base64 is not in correct format VB.netBase64 的十六进制值格式不正确 VB.net
【发布时间】:2022-01-02 01:21:34
【问题描述】:

我正在尝试将字符串转换为十六进制,然后再转换为 Base64,它正在工作,但获取的 base64value 不匹配 - Vs 2008(.net 3.5) & vs 2019 (.net 4.6)

这是我的代码 --十六进制字符串

Dim QrCodeHex as string ="010c426f6273205265636f726473020f3331303132323339333530303030330314323032322d30342d32355431353a33303a30305a0407313030302e303005063135302e3030"
dim QrCodeBase64En as string = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(QrCodeHex))

我得到这个结果 - 是错误的

MDEwYzQyNmY2MjczMjA1MjY1NjM2ZjcyNjQ3MzAyMGYzMzMxMzAzMTMyMzIzMzM5MzMzNTMwMzAzMDMwMzMwMzE0MzIzMDMyMzIyZDMwMzQyZDMyMzU1NDMxMzUzYTMzMzAzYTMwMzA1YTA0MDczMTMwMzAzMDJlMzAzMDA1MDYzMTM1MzAyZTMwMzA = P>

正确的结果是

AQxCb2JzIFJlY29yZHMCDzMxMDEyMjM5MzUwMDAwMwMUMjAyMi0wNC0yNVQxNTozMDowMFoEBzEwMDAuMDAFBjE1MC4wMA==

我如何得到它。

【问题讨论】:

  • 第一个 base64 字符串包含十六进制字符串。第二个(正确的)包含基础字符串。 Bobs Records3101223935000032022-04-25T15:30:00Z1000.00150.00 但您写道您正在尝试将字符串转换为十六进制然后转换为 Base64,但转换为十六进制的步骤似乎没有必要。只需将原始字符串转换为 base64。
  • 我们需要base64的以下细节。
  • 我们需要base64的以下细节。标签 + 长度 + 值。标签为 1 ,长度为 12 ,数据为 "Bobs Records" 。 bas64 字符串到十六进制的转换应该是 010c426f6273205265636f726473。例如 112Bobs 记录到 base64 并将 base 64 解码为十六进制 010c426f6273205265636f726473。请帮忙
  • 感谢 - 现在可以使用了

标签: vb.net base64 hex


【解决方案1】:

System.Text.Encoding.UTF8.GetBytes 将(常规)字符串转换为字节数组。但是,在您的情况下,您没有常规字符串(“Bobs Records ...”),而是字节数组的十六进制表示(“010c426f62 ...”)。因此,您需要先将该十六进制表示形式转换为字节数组:

Dim QrCodeHex As String = "010c426f6273205265636f726473020f3331303132323339333530303030330314323032322d30342d32355431353a33303a30305a0407313030302e303005063135302e3030"
    
' Hex to bytes
Dim bytes As Byte() = BigInteger.
    Parse(QrCodeHex, NumberStyles.AllowHexSpecifier).
    ToByteArray().Reverse().ToArray()
    
Dim QrCodeBase64En As String = Convert.ToBase64String(bytes)
    
Console.WriteLine(QrCodeBase64En)

(fiddle)

注意:我只是使用 BigInteger 进行转换,因为它是最紧凑的方式,无需依赖 .NET 5+ 功能。 (Reverse 是必需的,因为默认情况下,它将数字输出为 little-endian。)请参阅此问题以获取替代方案:How can I convert a hex string to a byte array?

【讨论】:

  • 谢谢——现在可以使用了
  • 亲爱的@heinzi 我也遇到了同样的问题。我在 JAVA-11 平台上工作。请你帮助我好吗。导入 java.nio.charset.Charset;导入 java.nio.charset.StandardCharsets;导入 java.util.Base64;公共类 QrCodeSample { public static void main(String[] args) { Charset cset = StandardCharsets.UTF_8;字节[]巴尔= “010c426f6273205265636f726473020F3331303132323339333530303030330314323032322d30342d32355431353a33303a30305a0407313030302e303005063135302e3030” .getBytes(CSET);字符串 bVal = Base64.getEncoder().encodeToString(bArr); System.out.println(bVal); } }
  • @mahmoodsk:当然,这里是如何在 Java 中进行从字符串到字节数组的转换:stackoverflow.com/q/140131/87698
猜你喜欢
  • 1970-01-01
  • 2022-10-01
  • 1970-01-01
  • 2011-04-14
  • 2020-05-16
  • 1970-01-01
  • 2017-12-05
  • 2013-06-10
  • 1970-01-01
相关资源
最近更新 更多