![](/img/trans.png)
[英]Bitmap(Int32, Int32, PixelFormat) throws ArgumentException
[英]String.Substring Method (Int32, Int32) throws ArgumentOutOfRangeException
我有一个字符串,其中前5个字符从不为空,并且从char 6到结束数据的变量为leght。 像这样:
string inData = comPort1.ReadExisting();
//Console.WriteLine("inData: " + inData);
string origMsg = inData.Substring(4, 1);
//Console.WriteLine("origMsg: " + origMsg);
string seAnex = inData.Substring(5, 15); // ArgumentOutOfRangeException
inData = inData.Substring(5, inData.Length - 8);
//Console.WriteLine("new inData: " + inData);
if (seAnex == "some_text_15_ch")
{
//...
}
else
{
//...
}
输出:
inData: {1112Test}
origMsg: 2
new inData: Test
此代码引发ArgumentOutOfRangeException: Index and length must refer to a location within the string
。 我该如何解决?
string origMsg = inData.Substring(4, 1);
“ startIndex不能大于字符串的长度”
换一种说法,
4不能大于inData的长度
4大于inData的长度
inData.Length小于4
我不确定您要如何处理您的代码。 但是,如果只是为了解决异常。 您可以这样解决:
string inData = comPort1.ReadExisting();
//Console.WriteLine("inData: " + inData);
if (inData.Length >= 5)
{
string origMsg = inData.Substring(4, 1);
//Console.WriteLine("origMsg: " + origMsg);
//string seAnex = inData.Substring(5, 15); // ArgumentOutOfRangeException
string seAnex = inData.Substring(5, inData.Length - 5);
//inData = inData.Substring(5, inData.Length - 8);
//Console.WriteLine("new inData: " + inData);
if (seAnex == "some_text_15_ch")
{
//...
}
else
{
//...
}
}
我想您的目的是从COM通信收到的长数据字符串"{111abcxzy}{111abcxzy}{..."
,从"{111abcxzy}"
格式的消息中获取数据信息?
我敢打赌,您没有说的字符串值。 如果实际上是5个以上的字符,则在调用SubString(4,1)时就不会出现ArgumentOutOfRange异常。 打印出该值或在调试器中检查该值以确认
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.