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 
表示的是什么呢?

一般是什么情况下,需要开辟这样的数组?

如果现在不太理解也没关系,不会阻碍你进步的。多做些开发/练习,回头来看就小蜜蜂论坛发帖机会觉得很容易。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值