Ahm*_*yas -1 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
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
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
所以在C#中,我总是得到一个FormatException做时byte.Parse(后直for语句行)
关于C#应该是什么的任何想法?
此外 - TODO评论中的C#版本也将受到赞赏:-)
错误是在字符串的开头包含"&H",并且在byte.Parse没有指定的情况下使用NumberStyles.AllowHexSpecifier.Convert.ToByte尽管使用起来会更简单:
byte x = Convert.ToByte(modAccountNumberAsciiHex.Substring(iIdx - 1, 2), 16)
Run Code Online (Sandbox Code Playgroud)
另请注意,您的代码目前非常"基于1".这感觉就像移植VB.更惯用的C#将是:
for (int index = 0; index < 3; index += 2)
{
byte x = Convert.ToByte(text.Substring(index, 2), 16);
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
733 次 |
| 最近记录: |