Vb.net 转换包含&;的字符串;H27等转换为其真实字节值

Vb.net 转换包含&;的字符串;H27等转换为其真实字节值,vb.net,dictionary,type-conversion,hex,byte,Vb.net,Dictionary,Type Conversion,Hex,Byte,我有几本字典是从数据库中填充的这里是一些数据库示例 数据库中的所有文件都表示为字符串 PromoStatus 3 Paid PromoStatus 4 Escrowed TickTransCode &H0 Valid cashable ticket TickTransCode &H1 Valid restricted promo ticket TickTransCode &H2 Valid nonrestricted p

我有几本字典是从数据库中填充的这里是一些数据库示例 数据库中的所有文件都表示为字符串

PromoStatus         3   Paid
PromoStatus         4   Escrowed
TickTransCode   &H0 Valid cashable ticket
TickTransCode   &H1 Valid restricted promo ticket
TickTransCode   &H2 Valid nonrestricted promo ticket
BIllDenom           0   1
BIllDenom           1   2
这是我的代码

Public Shared TickTransCode As New Dictionary(Of Byte, String)()
Public Shared BIllDenom As New Dictionary(Of Byte, Decimal)()
Public Shared PromoStatus As New Dictionary(Of Byte, String)()    
Dim myReader As SqlDataReader = Nothing
Dim myCommand As New SqlCommand("select * from dictionary", myConnection)
myReader = myCommand.ExecuteReader()
While myReader.Read()
    Select Case myReader.GetString(2)
        Case "PromoStatus"
           PromoStatus.Add(Convert.ToByte(myReader.GetString(3)), myReader.GetString(4))
        Case "BillDenom"
           BIllDenom.Add(Convert.ToByte(myReader.GetString(3)), Convert.ToByte(myReader.GetString(4)))
        Case "TickTransCode"
           TickTransCode.Add((myReader.GetString(3)), myReader.GetString(4))
     End Select
End While
第一种情况很好,第三种情况我不确定正确的转换应该是10,HF应该是15等等。你可能会问,为什么我不把实际的数字放在DB中,但十六进制数是我从通信流中得到的,文档使用的数字,所以我需要保持不变,所以在遇到问题时不必转换每个数字拍摄数据问题

这是我得到的错误

Input string was not in a correct format

还有没有更好的方法从数据库中创建字典,我要填充的字典比这个示例中的多得多,我真的不希望每个字典都有一个表。我使用DB的原因是,我可以在不必重新编译的情况下添加到字典中,还可以为提示和消息等添加一些其他语言,这些语言可以在运行时加载或更改在SQL中运行时您可以执行以下操作:

SELECT CAST(SUBSTRING(HexNumber, 2, 9999) AS INT)
或者在VB端:

Dim tInt As Int32 = Int32.Parse(hexString, System.Globalization.NumberStyles.HexNumber)

NumberStyles.HexNumber不允许使用“&h”或“&h”。但是,您可以简单地删除它们:

Dim s = "&h1A"
s = s.Replace("&H", "").Replace("&h", "")
Dim n = Integer.Parse(s, Globalization.NumberStyles.HexNumber)
Console.WriteLine(n.ToString)

NumberStyles.HexNumber
是一种复合样式,包括
NumberStyles.allowehexspecifier
,文档声明“&h”是有效的说明符,但不清楚是否允许使用大写变量。@Jodrell实际上文档声明“&h”是不允许的:使用此样式分析的字符串不能以“0x”或“&h”“()”作为前缀。在数据库中放置Visual Basic特定格式非常难看,尽管不如将字符串放在应为数字的列中难看。请在写入数据库数据的代码中修复此问题。ticktrancode.Add(Byte.Parse(myReader.GetString(3)。Substring(2,Len)(myReader.GetString(3))-2)、NumberStyles.HexNumber)、myReader.GetString(4))这是我要尝试的,它似乎有效,并且基于您所说的,除了我使用子字符串而不是替换之外,谢谢