如何在VB.NET中将字符串转换为十六进制?

5

我怎样将文本框中的字符串转换为十六进制?

我只找到了使用C#的方法。VB.NET是否有能力进行这样的转换?如果可以,我想知道如何将字符串转换为十六进制和将十六进制转换为字符串。


你想将 'A' 转为 Int(10) 吗?并将 10 转为 Hex(A)? - corn3lius
@corn3lius 如果int(10)转换成十六进制,那么是的。 - Mark Chai
这个问题需要更多的关注。你想要什么?是将包含十六进制值的字符串转换为整数,还是将包含字节的字符串转换为包含字符串中所有字节的十六进制值的字符串?在你给出一些解释之前,我会投反对票的。提供你的C#代码对其他人来说也很有趣! - schlebe
7个回答

11
Dim val As String
val = "10"
Dim hexVal As Integer
hexVal = Convert.ToInt32(val, 16) //16 specifies the base
Console.WriteLine(hexVal)

这将显示16,它是十六进制字符串“10”的整数表示。


1
相反地,您可以使用Hex(16)。 - corn3lius
我尝试了这个,但不理解它。如何使字母转换? - Mark Chai
@MarkChai,只需将val设置为"A",它将显示16,或将其设置为"10A",它将显示266。 - Habib

4
您可以通过以下操作将整数转换为十六进制数:
Convert.ToInt32(15, 16)

将其转换回整数,你可以这样做:

Integer.Parse("15f", System.Globalization.NumberStyles.HexNumber)

3

经过验证的代码

通过复制粘贴创建此函数。

Function StringToHex(ByVal text As String) As String
    Dim hex As String
    For i As Integer = 0 To text.Length - 1
        hex &= Asc(text.Substring(i, 1)).ToString("x").ToUpper
    Next
    Return hex
End Function

使用方法如下

Debug.WriteLine(StringToHex("sim0n"))

Source


3
Public Function StrToHex(ByRef Data As String) As String
    Dim sVal As String
    Dim sHex As String = ""
    While Data.Length > 0
        sVal = Conversion.Hex(Strings.Asc(Data.Substring(0, 1).ToString()))
        Data = Data.Substring(1, Data.Length - 1)
        sHex = sHex & sVal
    End While
    Return sHex
End Function

有没有办法在计时器中使用这个? - Mark Chai

2
为了将内容转换为十六进制,请使用Convert.ToInt32(val, 16)。Convert.ToInt32支持有限的进制,包括2、8、10和16。
为了将内容转换为任意进制,请使用:
Public Shared Function IntToString(value As Integer, baseChars As Char()) As String
    Dim result As String = String.Empty
    Dim targetBase As Integer = baseChars.Length

    Do
        result = baseChars(value Mod targetBase) + result
        value = value / targetBase
    Loop While value > 0

    Return result
End Function

上述函数来源于这个问题。C#转VB的转换是通过使用此工具完成的。


1

使用LINQ可以编写短而有效的表达式,以十六进制形式显示字符串s的所有字符:

String.Join(" ", s.Select(Function(c) Conversion.Hex(AscW(c)).PadLeft(4, "0")).ToArray()))

例子:

对于字符串► fix,它会给出字符串25BA 0020 0066 0069 0078

祝你愉快!

请记住,这是启用Unicode的,为每个字符返回4位十六进制值,因为旧的纯非Unicode ASCII已经过时,您不应再在任何应用程序中依赖它。


0
在我看来,Tilak的代码似乎还可以,但实际上并不是。
value / targetBase的四舍五入结果太大了。
通过使用Fix(),得到的整数将会是正确的。
我要赞扬Tilak找到了这样一个简洁的解决方案。

在附带的代码中,我将展示如何轻松测试IntToString等函数。

消息框中预期的消息为:

旧结果为:
0 1 10 101 100 101 1010 1001 1000 1001 1010
0 1 1X 10 11 1XX 1X0 1X1 10X 100 101
0 1 X 1y 10 11 XX Xy X0 X1 XX
0 1 X 1y 1z 10 11 1X Xy Xz X0
新结果为:
0 1 10 11 100 101 110 111 1000 1001 1010
0 1 X 10 11 1X X0 X1 XX 100 101
0 1 X y 10 11 1X 1y X0 X1 XX
0 1 X y z 10 11 1X 1y 1z X0
我认为新结果更好。

Public Sub test()
    Dim numberCharacters As String = "01Xyz"
    Dim messageText As String = "The old results are;" & vbNewLine
    For loopCount As Integer = 1 To 2
        If loopCount = 2 Then messageText &= "The new results are;" & vbNewLine
        For baseLength As Integer = 2 To 5
            Dim baseCharacters As Char() = _
                Strings.Left(numberCharacters, baseLength).ToArray
            For integerValue As Integer = 0 To 10
                Dim resultText As String = _
                    Me.IntToString(integerValue, baseCharacters, loopCount = 2)
                messageText &= resultText & " "
            Next
            messageText &= vbNewLine
        Next
    Next
    Call MsgBox(berichtTekst & "The new results are better IMHO.")
End Sub

Public Function IntToString(value As Integer, baseChars As Char(), _
        Optional newCode As Boolean = False) As String
    Dim result As String = String.Empty
    Dim targetBase As Integer = baseChars.Length
    Do
        result = baseChars(value Mod targetBase) & result
        If newCode Then ' Improved code
            value = Fix(value / targetBase)
        Else ' Original code
            value = value / targetBase
        End If
    Loop While value > 0
    Return result
End Function

希望这能帮到其他人。

我有超过25年的编程经验,主要是在RPG、Cobol、Synon、CL和Basic方面。我也了解一些Delphi、Pascal和C#。我相信我可以成为这个社区的帮助。
让我感到难过的是我不能对答案进行评论。希望有人能给我一些积分,这样我就可以更轻松地帮助别人了。
因此,我将我的评论添加到Tilak的答案中,日期为2012年5月8日,作为答案。这是我第一次,也希望是唯一一次这样做。很抱歉,但我不知道其他方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接