byte类型数组如何定义如何的赋值问题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
表⽰的是什么呢?
⼀般是什么情况下,需要开辟这样的数组?
如果现在不太理解也没关系,不会阻碍你进步的。多做些开发/练习,回头来看就会觉得很容易。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论