Convert.ToInt32的异常

guojun0718 2016-05-17 08:49:38
说明:在form中有一个文本框(TextBox)
在这个文本框里输入16进制的数字,以空格分隔
例如:00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10
以下函数,读出数据并解码,将其输入到一个byte的数组

当输入的是01 02的时候 监视sendStrArray = {string[2]}
[0]="01"
[1]="02"
当输入的是01 02 的时候,和上次的差别在于末尾多了一个空格监视sendStrArray = {string[3]}
[0]="01"
[1]="02"
[2]=""
运行到 value = Convert.ToInt32(aStrByteData, 16);
抛出异常
[System.ArgumentOutOfRangeException] = {"索引超出范围。必须为非负值并小于集合大小。\r\n参数名: startIndex"}
StackTrace = " 在 System.ParseNumbers.StringToInt(String s, Int32 radix, Int32 flags, Int32* currPos)\r\n 在 System.Convert.ToInt32(String value, Int32 fromBase)\r\n 在 WindowsFormsApplication1_TCPIP1.Form1.PrepareDataToSqlServer() 位置 d:\\用户目录\\我的文档\\visual studio 20...



private void PrepareDataToSqlServer()
{
Int32 iPoint = 0;
int value = 0;
try
{
m_byteArrayWorkInstructionDataDataPart = new Byte[5136];
string[] sendStrArray = new string[8192];

string sendStr = textBoxServerSend.Text;//文本框的字符
sendStrArray = sendStr.Split(' ');//用空格键分割

foreach (string aStrByteData in sendStrArray)
{

value = Convert.ToInt32(aStrByteData, 16);
m_byteArrayWorkInstructionDataDataPart[iPoint] = (byte)value;

iPoint++;
}
}
catch (Exception eException)
{
}
}

请教如何在代码中处理和防止这种异常?
...全文
680 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjp1234airen4385 2016-05-18
  • 打赏
  • 举报
回复
空格和空字符怎么能转换成数字呢。 你判断一下,如果aStrByteData是“”,则不要转换,单独处理就好
songbing774933 2016-05-18
  • 打赏
  • 举报
回复
sendStrArray = sendStr.Split(' ');
修改为

sendStrArray = sendStr.Split(new string[]{" "},StringSplitOptions.RemoveEmptyEntries);
Justin-Liu 2016-05-18
  • 打赏
  • 举报
回复
索引超出范围 我认为说这是错误更合理 看一下convert.toint的第二个参数什么意思吧
shoppo0505 2016-05-17
  • 打赏
  • 举报
回复
sendStr trim以下

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧