将字符串转换为该字符串的等效十六进制

时间:2016-02-20 07:43:31

标签: vb.net string hex

我想将我输入的字符串转换为等效的十六进制。

例如:

我有字符串D7 ,我希望将其转换为十六进制D7 ,以便只能读取十六进制值的软件才能读取它。 / p>

bla-bla-bla =错误,因为没有相应的十六进制

aBc = ABC ,因为它的十六进制等效。

123 = 123 ,因为它的十六进制等值。

12 AB 3.14 = 错误,因为没有相应的十六进制

3.F1 = 错误,因为没有相应的十六进制

虽然我不确定,但我想这就是结果。只要没有每个文本的十六进制等值,那么它就会出错。

编辑:我已经尝试转换德米特里的C#代码,但它仍然无效。我星期一再试一次

这是代码

Dim source As String = "abc789Def"

Dim Sb As New StringBuilder(source.Length)

For Each c As Char In source
    If ((c >= "0" AndAlso c <= "9") Or (c >= "a" AndAlso c <= "f") Or (c >= "A" AndAlso c <= "F")) Then
        Sb.Append(Char.ToUpper(c))
        Dim result As String = Sb.ToString


        Console.WriteLine("result " & result)
    Else
        Console.Write("Error")
    End If
Next

2 个答案:

答案 0 :(得分:2)

看来,如果 all ,则希望字符串为大写,其中的字符位于['0'..'9']或{{1 }或['a'..'f']范围(C#代码):

['A'..'F']

修改:没有 Linq 解决方案:

String source = "abc789Def";

if (source.All(c => (c >= '0' && c <= '9') || 
                    (c >= 'a' && c <= 'f') || 
                    (c >= 'A' && c <= 'F'))) {
  String result = source.ToUpper();

  //TODO: put a relevant code here
}
else {
  // error: at least one character can't be converted
}

答案 1 :(得分:1)

使用System.Globalization.NumberStyles.HexNumber样式,TryParse方法在整数类型上提供验证十六进制数的功能。

Dim inputValue As String = "23"
Dim returnValue As String = Nothing
If ValidateAndFormatHex(inputValue, returnValue) Then
   Console.WriteLine(returnValue)
Else
   Console.WriteLine("Error")
End If
Private Shared Function ValidateAndFormatHex(input As String, ByRef formattedValue As String) As Boolean
   input = input.Trim().ToUpperInvariant
   Dim result As Int32
   Dim parses As Boolean = Int32.TryParse(input, System.Globalization.NumberStyles.HexNumber, System.Globalization.CultureInfo.InvariantCulture, result)
   If parses Then formattedValue = input
   Return parses
End Function