在VB.NET中工作,但在C#字节转换中不工作

在VB.NET中工作,但在C#字节转换中不工作,c#,vb.net,vb6-migration,C#,Vb.net,Vb6 Migration,因此,我将一些代码从VB.NET迁移到C#,但在C#中进行字节分析时失败 下面是VB.NET代码的工作原理: Dim sModifiedAccountNumber_AsciiHex Dim iByte As Byte = 0 Dim iIdx As Integer = 0 Dim strByte As String = String.Empty sModifiedAccountNumber_AsciiHex = "FC13" For iIdx = 1 To 3 Step 2 iByt

因此,我将一些代码从VB.NET迁移到C#,但在C#中进行字节分析时失败

下面是VB.NET代码的工作原理:

Dim sModifiedAccountNumber_AsciiHex
Dim iByte As Byte = 0
Dim iIdx As Integer = 0
Dim strByte As String = String.Empty

sModifiedAccountNumber_AsciiHex = "FC13"
For iIdx = 1 To 3 Step 2

    iByte = CByte("&H" & Mid$(sModifiedAccountNumber_AsciiHex, iIdx, 2))
    If iByte >= 120 And iByte <= 127 Then
        iByte = iByte Or &H80
        strByte = Hex$(iByte)
        Do While Len(strByte) < 2
            strByte = "0" & strByte
        Loop
        Mid$(sModifiedAccountNumber_AsciiHex, iIdx, 2) = strByte
    End If

Next
Dim sModifiedAccountNumber\u ASCIHIHEX
以字节=0表示的尺寸iByte
Dim iIdx作为整数=0
将strByte变暗为String=String.Empty
sModifiedAccountNumber\u AsciiHex=“FC13”
对于iIdx=1到3步骤2
iByte=CByte(“&H”和Mid$(sModifiedAccountNumber\u AsciiHex,iIdx,2))

如果iByte>=120且iByte则错误是在字符串开头包含“&H”,并使用
byte.Parse
而不指定
numberstyle.allowehexspecifier
。使用
Convert.ToByte
会更简单,不过:

 byte x = Convert.ToByte(modAccountNumberAsciiHex.Substring(iIdx - 1, 2), 16)
还要注意,您的代码目前非常“基于1”。感觉像是移植了VB。更惯用的C#应该是:

for (int index = 0; index < 3; index += 2)
{
    byte x = Convert.ToByte(text.Substring(index, 2), 16);
    ...
}
for(int-index=0;index<3;index+=2)
{
字节x=Convert.ToByte(text.Substring(索引,2),16);
...
}

您不需要在C#中包含“&H”:


谢谢你,乔恩。你说得对,这是VB6代码。是的,我知道&H。当我执行以下操作时它会工作:iByte=byte.Parse(modAccountNumberAsciiHex.Substring((iIdx-1),2),System.Globalization.NumberStyles.HexNumber);。
for (int index = 0; index < 3; index += 2)
{
    byte x = Convert.ToByte(text.Substring(index, 2), 16);
    ...
}
byte.Parse((modAccountNumberAsciiHex.Substring((iIdx - 1), 2)));