我有问题通过BitConverter.ToInt32将字节数组转换为int32。
发生了'System.ArgumentException'类型的未处理异常 mscorlib.dll中
其他信息:目标数组不够长,无法复制>中的所有项目。采集。检查数组索引和长度
private void textBox2_TextChanged(object sender, EventArgs e)
{
byte[] StrToByte = new byte[9];
int IntHexValue;
StrToByte = Encoding.UTF8.GetBytes(textBox2.Text);
textBox4.Text = BitConverter.ToString(StrToByte);
IntHexValue = BitConverter.ToInt32(StrToByte, 0);
}
答案 0 :(得分:7)
假设textBox2
中文本的UTF-8表示长度少于4个字节。 BitConverter.ToInt32
需要4个字节的数据才能使用。
顺便说一下,目前还不清楚你想要实现的目标 - 但在编码文本上使用BitConverter.ToInt32
很少有用。
另外,在编码风格方面:
因此,即使您的代码 实际上是正确的,也可以更好地编写为:
private void textBox2_TextChanged(object sender, EventArgs e)
{
byte[] encodedText = Encoding.UTF8.GetBytes(textBox2.Text);
textBox4.Text = BitConverter.ToString(encodedText);
int leadingInt32 = BitConverter.ToInt32(encodedText, 0);
// Presumably use the value here...
}
(正如我所说,目前尚不清楚你真正想要做什么,这就是为什么名称leadingInt32
并不理想 - 如果我们知道你试图与价值联系的意义,我们可以在变量名中使用它。)
答案 1 :(得分:2)
此错误的原因是BitConverter.ToInt32
期望至少包含4个元素的字节数组,但是传递给它Encoding.UTF8.GetBytes(textBox2.Text)
的结果,如果用户输入的内容很短,则可以小于4个字节textBox2
,例如“123” - 它只有3个字节。
作为场景的解决方法,您应该将字节数组填充至少4个字节长,如下所示:
StrToByte = Encoding.UTF8.GetBytes("123");
if (StrToByte.Length < 4)
{
byte[] temp = new byte[4];
StrToByte.CopyTo(temp, 0);
StrToByte = temp;
}
IntHexValue = BitConverter.ToInt32(StrToByte, 0);