未处理的异常转换为字节

时间:2017-01-06 18:37:53

标签: c# int type-conversion byte

正如标题所暗示的那样,我得到了“类型'System.FormatException'”样式消息的未处理异常。需要一些帮助找出原因。我正在读取一个我需要解析的十六进制值的文件。我正在读它的值可能看起来像这个“0x12345678”(长度为4个字节)。

第一个字节(注意这是小端)是'BE',我可以解决这个问题。我的问题是尝试接下来的三个字节并将其转换为人类可读的int。 (很长一段时间,但生成我正在解析的输出的程序采用人类可读的十进制数并将其转换为此LE废话。)

    string parmVal = lineF.Substring((pos + length));  // this is "0x12345678"

    string hexID = parmVal.Substring(2, 2);   // stores '12'

    byte[] testID = new byte[4];
    testID[0] = Convert.ToByte(parmVal.Substring(4, 2));  <----error here
    testID[1] = Convert.ToByte(parmVal.Substring(6, 2));
    testID[2] = Convert.ToByte(parmVal.Substring(8, 2));
    testID[3] = Convert.ToByte(0);

    decimalID = int.Parse(hexID, System.Globalization.NumberStyles.HexNumber);  // stores 18 (0x12)
    testIDNumber = BitConverter.ToInt32(testID,0);  // stores 345678

有趣的是,在代码中我稍后将这些值输出到CSV文件,并且我打印出来的值看起来是正确的,即使它抛出异常。我尝试以与第一个字节相同的方式读取最后3个字节,但是当我对它执行int.Parse()时,它会向后获取它的字节序。我希望它转换为0x“785634”,其转换为0x“345678”。

1 个答案:

答案 0 :(得分:1)

尝试在Convert.ToByte调用中指定base。

在你的情况下,它必须是:

testID[0] = Convert.ToByte(parmVal.Substring(4, 2), 16);