2012-07-21 39 views
-1

因此,我將一些代碼從VB.NET遷移到C#,但它在C#中執行字節解析時失敗。在VB.NET中工作,但不在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 

C#版本:

string modAccountNumberAsciiHex = "FC13"; 
byte iByte; 
string strByte = string.Empty; 

for (int iIdx = 1; iIdx <= 3; iIdx += 2) 
{ 
    iByte = byte.Parse(("&H" + modAccountNumberAsciiHex.Substring((iIdx - 1), 2))); 
    if (iByte >= 120 && iByte <= 127) 
    { 
     iByte = iByte |= 0x80; 
     strByte = BitConverter.ToString(new byte[] { iByte }); 
     while (strByte.Length < 2) 
     { 
      strByte = "0" + strByte; 
     } 

     // TODO: convert the line below to C# 
     // Mid$(sModifiedAccountNumber_AsciiHex, iIdx, 2) = strByte 

    } 
} 

所以在C#我總是對後直接做byte.Parse(線時收到FormatException聲明)

有關這應該在C#中的任何想法?

另外 - 在TODO註釋C#版本也將:-)

回答

5

讚賞的錯誤是包括「& H」的字符串,使用byte.Parse不指定NumberStyles.AllowHexSpecifier的開始。這將是簡單的使用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); 
    ... 
} 
+0

+1 ...你是辦法,我喬恩太快:) – 2012-07-21 15:12:21

+0

謝謝喬恩。你是對的,它是VB6代碼。是的,我知道&H。它工作時,我做了以下事情:iByte = byte.Parse(modAccountNumberAsciiHex.Substring((iIdx - 1),2),System.Globalization.NumberStyles.HexNumber);. – 2012-07-21 15:23:09

1

你並不需要包括 「& H」 在C#:

byte.Parse((modAccountNumberAsciiHex.Substring((iIdx - 1), 2))); 
相關問題