4

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

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

4

7 回答 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”的整数等价物。

于 2012-05-08T18:16:33.203 回答
4

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

Convert.ToInt32(15, 16)

并将其转换回整数,您可以执行以下操作:

Integer.Parse("15f", System.Globalization.NumberStyles.HexNumber)
于 2012-05-08T18:25:52.613 回答
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
于 2012-05-08T18:19:43.887 回答
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"))

来源

于 2016-02-19T08:45:09.650 回答
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

上述功能来自this question。C# 到 VB 的转换是使用这个.

于 2012-05-08T18:21:29.670 回答
1

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

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

例子:

对于 string► fix它给出 string 25BA 0020 0066 0069 0078

享受!

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

于 2014-11-10T07:09:21.073 回答
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 X0 11 1X Xy
结果是新的;
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 yz 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#。我相信我可以为这个社区提供帮助。
我无法对答案发表评论,这让我感到难过。希望有人能给我加分,这样我以后可以更轻松地帮助别人。
因此,我将我的评论添加到 2012 年 5 月 8 日的 Tilak 的答案中,作为答案。这是我第一次也希望是唯一一次这样做。很抱歉,但我不知道其他方法。

于 2018-03-12T13:26:33.667 回答