问题1
byte[] data1 ={0x12,0x13,0x14};
byte[] allSendStr = new byte[100];
Buffer.BlockCopy(data1, 0, allSendStr, 0, byteScore.Length);
private byte[] acceptBuf = byte[100];
//现在有个函数
void putbuff(byte[] allSendStr)
{
acceptBuf = allSendStr;
}
我的本意是吧 allSendStr 的值赋给 acceptBuf
我这样写是错的
但是我不知道正确应该怎么写?
void putbuff(byte[] allSendStr)
{
for(int i = 0; i < allSendStr.Length; i ++)
{
acceptBuf[i] = allSendStr[i];
}
}
这样写,可以吗?
void putbuff(byte[] allSendStr)
{
Buffer.BlockCopy(allSendStr, 0, acceptBuf, 0, allSendStr.Length);
}
这样写,可以吗?
问题2:
byte 的 2 数组 怎么定义阿?
第 0 维是 放这个 数据的 条数(比如 有几个字符串)
第 1 维是 存放 真正的数据(比如 这个个字符串真正的数据)
这个 2 维数组 怎么定义?
比如我这个 2 维数组
需要保持 10 条 字符串
每条字符串的 长度为 10000
byte[][] = new byte[10][10000]
是这样吗?
byte[,] = new byte[10,10000]
是这样吗?
问题3:
byte[][] 和 byte[,] 的区别是什么?
什么情况用 byte[][]?
什么情况用 byte[,]?
byte[,] 内存上是连续的,可以理解为规整的二维数组。
byte[][]是数组的数组。
比如我这个 2 维数组
需要保持 10 条 字符串
每条字符串的 长度为 10000
这时byte[][]相对合适一些。
至于问题一,BlockCopy较好,效率高而且代码简单。
private byte[][] DataBuf = new byte[10][10000];
我这么写
为什么编译提示
error CS0178: Invalid rank specifier: expected `,' or `]'
这是什么原因阿?
谢谢!
private static byte[][] DataBuf = new byte[10][];
static void Main(string[] args)
{
for (int i = 0; i < DataBuf.Length; i++)
{
DataBuf[i] = new byte[10000];
}
}
byte[10][10000]是C/C++的概念,类比C#的byte[10,10000]。
C#的byte[][]可以是交错数组,比如
DataBuf[0] = new byte[10000];
DataBuf[1] = new byte[100];
DataBuf[2] = new byte[1];
...
DataBuf[9] = new byte[999];
因此需要初始化。
如果是用来发送数据,开发中较少直接使用byte[][],而是可能用比如
Queue<byte[]>
List<Byte[]>
Queue<ArraySegment<byte>>
等等数据结构。
你现在不用着急去掌握这些数据结构,随着开发经验积累,再去学习即可。
不能
private byte[][] DataBuf = new byte[10][];
private byte[,] DataBuf = new byte[10,10];
byte[][] DataBuf1 = new byte[10][15];
假设
DataBuf1
表示的是 有 10 条数据,每条数据的长度为 15
那么
byte[][] DataBuf2 = new byte[10,15];
DataBuf2
表示的是什么呢?
一般是什么情况下,需要开辟这样的数组?
如果现在不太理解也没关系,不会阻碍你进步的。多做些开发/练习,回头来看就小蜜蜂论坛发帖机会觉得很容易。