-1

そのため、一部のコードを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#では、 (forステートメントの直後の行)FormatExceptionを実行すると常にaが表示されます。byte.Parse

これがC#でどうあるべきかについて何か考えはありますか?

さらに、TODOコメントのC#バージョンも高く評価されます:-)

4

2 に答える 2

5

間違いは、文字列の先頭に「&H」を含め、 。を指定せず使用することです。ただし、使用する方が簡単です。byte.ParseNumberStyles.AllowHexSpecifierConvert.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);
    ...
}
于 2012-07-21T15:10:34.037 に答える
1

C#に「&H」を含める必要はありません。

byte.Parse((modAccountNumberAsciiHex.Substring((iIdx - 1), 2)));
于 2012-07-21T15:12:01.253 に答える