簡體   English   中英

在VB.NET中有效,但在C#中無效-字節轉換

[英]Works in VB.NET but not in C# - byte conversion

因此,我正在將某些代碼從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

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 (for語句后的直線)時總是會收到FormatException

關於在C#中應該有什么想法?

另外-TODO注釋中的C#版本也將不勝感激:-)

錯誤是在字符串的開頭包含“&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);
    ...
}

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

byte.Parse((modAccountNumberAsciiHex.Substring((iIdx - 1), 2)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM