这是我的实习,所以我不能提供更多的上下文,但是这个方法不会返回所需的int并导致Index Out of Bounds异常。
方法中的String []由我公司的运输部门使用的手持式扫描仪的信息组成。其结果dataAsByteArray实际上是一个Byte [] [],因此嵌套的If语句中的.Length将获得Bundle条目的字节数,然后将其添加到fullBundlePacketSize,只要结果总和小于1000.
为什么不到1000?我一直负责修复的错误是一些扫描仪(使用旧版本的蓝牙)一次只能向接收器传输大约1000个字节的数据。这种方法是找到可以在不切入束条目的情况下传输多少字节(最初我将其硬编码为一次只传输1000个字节,这导致接收器获得无效的捆绑数据)。
扫描程序正在运行一个非常旧版本的Windows CE,并尝试在VS(2008)中进行调试,只是为该设备打开一个无效的模拟器。
我确信这是非常简单的事情,但我觉得看到它会有一套新的眼睛会有所帮助,所以非常感谢任何帮助或解决方案!
private int MaxPacketSizeForFullBundle(string[] data)
{
int fullBundlePacketSize = 0;
var dataAsByteArray = data.Select(s => Encoding.ASCII.GetBytes(s)).ToArray();
for (int i = 0; i < dataAsByteArray.Length; i++)
{
if ((fullBundlePacketSize + dataAsByteArray[i + 1].Length < 1000))
{
fullBundlePacketSize += dataAsByteArray[i].Length;
}
}
return fullBundlePacketSize;
}
答案 0 :(得分:5)
看看你的循环:
for (int i = 0; i < dataAsByteArray.Length; i++)
{
if ((fullBundlePacketSize + dataAsByteArray[i + 1].Length < 1000))
^^^^^
我怀疑你是在抛出一个异常,因为你正在为超出长度的数组建立索引。
你是说这个吗?
for (int i = 0; i < (dataAsByteArray.Length - 1); i++)
答案 1 :(得分:0)
结合@n8wrl的回答。您的问题是访问超出范围的异常。我相信你试图访问dataAsByteArray中值的实际字节值。
string[] data = {"444", "abc445x"};
int x = MaxPacketSizeForFullBundle(data);
dataAsByteArray = {byte [2] []}
byte [2] [0]包含{byte [3]},其中包含字符串中每个字符的实际值,因此对于&#34; 444&#34;,它将包含52,52,52。可能正在尝试访问这些单独的值,这意味着您需要使用byte [i] [j]访问更深层次的嵌套字节,其中0<j<data[i].Length.