如何将字符串从文本框转换为十六进制?
我只在C#中找到了方法。 VB.NET是否有能力做这样的事情?如果它可以,那么我想知道如何将字符串转换为十六进制和十六进制转换为字符串。
答案 0 :(得分:9)
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 :(得分: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
答案 2 :(得分:3)
您可以通过执行以下操作轻松地将整数转换为十六进制数字:
Convert.ToInt32(15, 16)
要将其转换回整数,您可以执行以下操作:
Integer.Parse("15f", System.Globalization.NumberStyles.HexNumber)
答案 3 :(得分: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的转换完成using this。
答案 4 :(得分:2)
经过测试和测试的代码
通过复制粘贴来创建此功能。
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"))
答案 5 :(得分:0)
可以使用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已经死了,您不应再在任何应用程序中依赖它
答案 6 :(得分: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日,作为答案。这是第一次也是唯一一次我诉诸于此。对不起,但我不知道其他方式。