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

如何在VB.NET中将字符串转换为十六进制?,vb.net,Vb.net,如何将文本框中的字符串转换为十六进制 我只在C#中找到了方法。VB.NET有能力做这样的事情吗?如果可以的话,我想知道如何将字符串转换为十六进制和十六进制转换为字符串 Dim val As String val = "10" Dim hexVal As Integer hexVal = Convert.ToInt32(val, 16) //16 specifies the base Console.WriteLine(hexVal) 这将显示16,它是十六进制字符串“10”的整数等价物。要转换

如何将文本框中的字符串转换为十六进制

我只在C#中找到了方法。VB.NET有能力做这样的事情吗?如果可以的话,我想知道如何将字符串转换为十六进制和十六进制转换为字符串

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

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

要转换为十六进制,请使用
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的转换已经完成。

您可以通过执行以下操作轻松地将整数转换为十六进制数:

Convert.ToInt32(15, 16)
要将其转换回整数,可以执行以下操作:

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

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

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

对于字符串
► 修复
它给出字符串
25BA 0020066 0069 0078

享受吧


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

经过测试的代码

通过复制粘贴创建此函数

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"))

以我的拙见,Tilak的代码似乎还可以,但事实并非如此。
value/targetBase的四舍五入给出的结果太大。
通过使用Fix()得到的整数将与它们应该的一样。
我赞扬蒂拉克为这个问题找到了如此简洁的解决方案

在附带的代码中,我将演示如何轻松测试IntToString之类的函数

消息框中的预期消息为:

旧的结果是
011010101010101010011001001000101010
01 1X 10 11 1X 1X 1X 1X 1X 10 x 100 101
0 1 X 1 y 10 11 XX Xy X0 X1 XX
0 1 X 1y 1z 10 11 1X Xy Xz X0
新的结果是:
0111010101011111000101010
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。我还知道一些德尔菲、帕斯卡和C。我相信我能对这个社区有所帮助。
我无法对答案发表评论,这让我很难过。希望有人能给我加分,这样从现在起我就能更容易地帮助别人。

因此,我在2012年5月8日Tilak的回答中添加了我的评论作为回答。这是我第一次,也希望是唯一一次求助于此。很抱歉,我不知道还有别的办法。

你想让“A”变成Int(10)吗?如果int(10)变成十六进制,那么这个问题需要更多的关注。你想要什么?将包含十六进制值的字符串转换为整数,或将包含字节的字符串转换为包含字符串中所有字节的十六进制值的字符串?在你解释之前,我投反对票。给出你的C#代码对其他人来说会很有趣!相反,你可以使用十六进制,我试过了,但不明白。如何转换字母?@MarkChai,只需将val=“A”设置为16,或将其设置为“10A”,即可显示266Ohhhh。谢谢有没有办法把它和计时器一起使用?
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