for (var i = 0; i < fillGap; i++)
{
numbers.Add(random.Next(Convert.ToInt32(max), Convert.ToInt32(min) + 1));
}
numbers = numbers.OrderByDescending(x => x).ToList();
for (int k = 0; k < numbers.Count; k++)
{
int s = numbers[k];
DataRow row = gridView9.GetDataRow(k);
string Id = row[1].ToString();
string Time = row[7].ToString();
byte[] bytes = BitConverter.GetBytes(s);
string Data = bytes[0].ToString("X2") + bytes[1].ToString("X2") + bytes[2].ToString("X2") + bytes[3].ToString("X2") + bytes[4].ToString("X2") + bytes[5].ToString("X2") + bytes[6].ToString("X2") + bytes[7].ToString("X2");
}
将得出的数值,添加到bytes 转换出错,“索引超出了数组界限”这个怎么解决呢?
60岁的老程序员来解答:
int 相比与 byte多出来的部分会被截断
比如 对于:
byte b = (byte)1024;
1024的二进制表示是:100 0000 0000 byte只能表示8位,从右往左截断,所以结果是 0000 0000,也就是 十进制的 0
byte b = (byte)257;
257的二进制是:1 0000 0001 从右往左截断,结果是 0000 0001,也就是十进制的 1。
当然如果是
byte b = (byte)100; 则不截断,因为没越界。
这就是大范围数据转成小范围的转法。 明白否
bytes 数组里面没那么多元素,先看看里面有几个字节
byte[] bytes = BitConverter.GetBytes(s);
//这里的bytes数组到底有多少个元素,你要判断下,下面直接使用bytes[0]……bytes[7];如有bytes 没有数据或者没有到8个元素,就会出现“索引超出了数组界限”错误
string Data = bytes[0].ToString("X2") + bytes[1].ToString("X2") + bytes[2].ToString("X2") + bytes[3].ToString("X2") + bytes[4].ToString("X2") + bytes[5].ToString("X2") + bytes[6].ToString("X2") + bytes[7].ToString("X2");
byte[] bytes = BitConverter.GetBytes(s);
string Data = string.Empty;
foreach (var item in bytes)
{
Data += item.ToString("X2");
}
代码修改一下
string Data ="";
for(var k = 0; k < bytes.length; k++)
Data =Data + bytes[k].ToString("X2") ;
byte[] bytes = BitConverter.GetBytes(s);
你首先要确认这个数组的长度,别溢出了