int 转换bytes 出错

     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);
你首先要确认这个数组的长度,别溢出了