C#索引超出了数组界限问题

sskkff 2010-05-05 09:52:46
byte[] data1 = new byte[25];
string str = " ";
switch (Data1[3])
{
case 0x20:
str = "1";
str += str;
break;
case 0x21:
str = "2";
str += str;
break;
case 0x22:
str = "3";
str += str;
break;
case 0x23:
str = "4";
str += str;
break;
case 0x24:
str = "5";
str += str;
break;
case 0x25:
str = "6";
str += str;
break;
case 0x26:
str = "7";
str += str;
break;
case 0x27:
str = "8";
str += str;
break;
case 0x28:
str = "9";
str += str;
break;
case 0x29:
str = "0";
str += str;
break;
case 0x30:
str = ".";
str += str;
break;
}

data1[0] = 0xAA;
data1[1] = 0x54;
data1[2] = 0x00;
data1[3] = 0x60;
data1[4] = 0x00;
data1[5] = 0x38;
for (int a = 6; a < 21; a++)
{
data1[a] = System.Convert.ToByte(str[a-6]);
}
data1[21] = 0xCC;
data1[22] = 0x33;
data1[23] = 0xC3;
data1[24] = 0x3C;
有这样一个代码,显示“未处理的“System.IndexOutOfRangeException”类型的异常出现在 WindowsApplication34.exe 中。其他信息: 索引超出了数组界限。”请问是怎么回事,我刚学C#,很多不懂, 请各位指教
...全文
1014 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sskkff 2010-05-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 mishidemayi 的回复:]
switch 里头的东东有什么用啊
一上来data1[3]肯定啥也没啊,也没有赋值,最后str也还是个空格啊

for循环下循环第二遍的时候 str[1] 这就肯定出错了。。。。
[/Quote]
byte i = 0;
byte[] Data1 = new byte[8];
Data1[1] = 0x78;
switch (i)
{
case 0x20:
Data1[3] = 0x20;
break;
case 0x21:
Data1[3] = 0x21;
break;
case 0x22:
Data1[3] = 0x22;
break;
case 0x23:
Data1[3] = 0x23;
break;
case 0x24:
Data1[3] = 0x24;
break;
case 0x25:
Data1[3] = 0x25;
break;
case 0x26:
Data1[3] = 0x26;
break;
case 0x27:
Data1[3] = 0x27;
break;
case 0x28:
Data1[3] = 0x28;
break;
case 0x29:
Data1[3] = 0x29;
break;
case 0x30:
Data1[3] = 0x30;
break;
}
serialPort1.Write(Data1, 0, 8);
serialPort1.Read(Data1, 0, 8);

byte[] data1 = new byte[25];
string str = " ";
switch (Data1[3])
{
case 0x20:
str = "1";
str += "1";
break;
case 0x21:
str = "2";
str += "2";
break;
case 0x22:
str = "3";
str += "3";
break;
case 0x23:
str = "4";
str += "4";
break;
case 0x24:
str = "5";
str += "5";
break;
case 0x25:
str = "6";
str += "6";
break;
case 0x26:
str = "7";
str += "7";
break;
case 0x27:
str = "8";
str += "8";
break;
case 0x28:
str = "9";
str += "9";
break;
case 0x29:
str = "0";
str += "0";
break;
case 0x30:
str = ".";
str += ".";
break;
}

data1[0] = 0xAA;
data1[1] = 0x54;
data1[2] = 0x00;
data1[3] = 0x59;
data1[4] = 0x00;
data1[5] = 0x30;
for (int a = 6; a <8; a++)
{
data1[a] = System.Convert.ToByte(str[a - 6]);


}
data1[21] = 0xCC;
data1[22] = 0x33;
data1[23] = 0xC3;
data1[24] = 0x3C;

if (Data1[3] == 0x20&& Data1[1] == 0x78 && Data1.Length == 8)
serialPort1.Write(data1, 0, 25);
if (Data1[3] == 0x21&& Data1[1] == 0x78 && Data1.Length == 8)
serialPort1.Write(data1, 0, 25);
if (Data1[3] == 0x22&& Data1[1] == 0x78 && Data1.Length == 8)
serialPort1.Write(data1, 0, 25);
if (Data1[3] == 0x23&& Data1[1] == 0x78 && Data1.Length == 8)
serialPort1.Write(data1, 0, 25);
if (Data1[3] == 0x24&& Data1[1] == 0x78 && Data1.Length == 8)
serialPort1.Write(data1, 0, 25);
if (Data1[3] == 0x25&& Data1[1] == 0x78 && Data1.Length == 8)
serialPort1.Write(data1, 0, 25);
if (Data1[3] == 0x26&& Data1[1] == 0x78 && Data1.Length == 8)
serialPort1.Write(data1, 0, 25);
if (Data1[3] == 0x27&& Data1[1] == 0x78 && Data1.Length == 8)
serialPort1.Write(data1, 0, 25);
if (Data1[3] == 0x28&& Data1[1] == 0x78 && Data1.Length == 8)
serialPort1.Write(data1, 0, 25);
if (Data1[3] == 0x29&& Data1[1] == 0x78 && Data1.Length == 8)
serialPort1.Write(data1, 0, 25);
if (Data1[3] == 0x30&& Data1[1] == 0x78 && Data1.Length == 8)
serialPort1.Write(data1, 0, 25);
这是我的全部程序,想要实现的功能是点击0~9和小数点,然后触屏上逐个显示,但是现在字符串长度不知道该如何定义为15位
mishidemayi 2010-05-05
  • 打赏
  • 举报
回复
switch 里头的东东有什么用啊
一上来data1[3]肯定啥也没啊,也没有赋值,最后str也还是个空格啊

for循环下循环第二遍的时候 str[1] 这就肯定出错了。。。。
mayonglong 2010-05-05
  • 打赏
  • 举报
回复
自己跟一下就全明白了~
liuyileneal 2010-05-05
  • 打赏
  • 举报
回复
按照这样赋值,就不会越界了
if(str.Length<19)
{
for (int a = 0; a < str.Length; a++)
{

data1[a+6] = System.Convert.ToByte(str[a]);
}
}
sskkff 2010-05-05
  • 打赏
  • 举报
回复
那么请问我该如何修改才能做到字符串长度最长为15呢
wwwwpig 2010-05-05
  • 打赏
  • 举报
回复
str声明的是字符串,座位字符串索引器可以写为数组形式,但是你的计算结果str最大为2位,for (int a = 6; a < 21; a++)
{
data1[a] = System.Convert.ToByte(str[a-6]);
}
当a>8的时候就越界了,所以报你说的那个错误
sxiaohui8709253 2010-05-05
  • 打赏
  • 举报
回复
对 里头switch执行完 最长是2 字符串索引那里str[a-6]
a-6>2 越界 报错
Peter200694013 2010-05-05
  • 打赏
  • 举报
回复
索引超出了数组界限,是因为你通过下标访问时超出了范围。
比如String s = "abc";长度为3,s[3]就是超出范围了
t316562725 2010-05-05
  • 打赏
  • 举报
回复
xuexi....
sxiaohui8709253 2010-05-05
  • 打赏
  • 举报
回复
字符串也是有索引器的
guanmingle 2010-05-05
  • 打赏
  • 举报
回复
单步调试一下,看看str[a-6]是不是有问题
zhangjiewoshiwo 2010-05-05
  • 打赏
  • 举报
回复
str = "2";
str += str;

这样的写法也有问题,我想你的意思是:原来str=“1”,这个时候你想执行上面的代码之后str=“12”,但是实际效果是str=“22”;你直接写str+=“2”;就可以了。
sprc_lcl 2010-05-05
  • 打赏
  • 举报
回复
1.我不明白string str = " ";
switch (Data1[3]) 这个是干啥的,哪来的Data1[3],此处可能是错误处
2.switch内执行完后str的长度最多是2 !
3.System.Convert.ToByte(str[a-6]);//str[a-6]中a-6的值明显有大于等于2的,所以其处必错
YuSuiYing_2010 2010-05-05
  • 打赏
  • 举报
回复
来看看,呵呵,都有些什么~~
zhangjiewoshiwo 2010-05-05
  • 打赏
  • 举报
回复
错误就在这
string str = " "; 这是字符串
str[a-6] 而这里把它当作数组来使用了

所以会报:索引超出了数组界限。的错误

110,571

社区成员

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

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

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