C# 转换为字节的未处理异常

C# 转换为字节的未处理异常,c#,int,type-conversion,byte,C#,Int,Type Conversion,Byte,正如标题所暗示的,我得到了“类型为'System.FormatException'的未处理异常”样式的消息。需要一些帮助来找出原因。我正在读取一个需要解析的十六进制值的文件。我读取的值可能类似于“0x12345678”(长度为4字节) 第一个字节(注意这是小端)是'BE',我可以得到它没有问题。然后,我的问题是尝试获取接下来的三个字节,并将其转换为人类可读的int(说来话长,但生成我正在解析的输出的程序将获取人类可读的十进制数,并将其转换为这个int) string parmVal=lineF.

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

第一个字节(注意这是小端)是'BE',我可以得到它没有问题。然后,我的问题是尝试获取接下来的三个字节,并将其转换为人类可读的int(说来话长,但生成我正在解析的输出的程序将获取人类可读的十进制数,并将其转换为这个int)

string parmVal=lineF.Substring((pos+length));//这是“0x12345678”
字符串hexID=parmVal.Substring(2,2);//商店“12”
字节[]testID=新字节[4];

testID[0]=Convert.ToByte(parmVal.Substring(4,2)) 尝试在Convert.ToByte调用中指定base

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

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

那是不可能的。错误不可能在那里。您确定parmVal的值为0x12345678吗?代码正常。将
lineF.Substring((pos+length))
替换为
“0x12345678”
,它运行时不会出错。这是为了进行健全性检查。由于“0x12345678”起作用,因此子字符串调用无法返回该值。我将运行一个实验:显式检查预期条件(parmVal==“0x12345678”),如果不匹配则抛出。我怀疑你的掷骰会被调用。好的,那么结果是指定基数16的答案解决了这个问题。在我失败的具体示例中,实际值是“0xBEEFFEED”,而不是“0x12345678”。我在问题中改变了这个值,以便更容易地显示“endian ness”是如何翻转的。事实证明,当我输入“12345678”号码时,我没有问题。
testID[0] = Convert.ToByte(parmVal.Substring(4, 2), 16);