其他分享
首页 > 其他分享> > CodeGo.net>将ushort []转换为byte []并返回

CodeGo.net>将ushort []转换为byte []并返回

作者:互联网

我有一个ushort数组,该数组需要转换为字节数组才能通过网络传输.

一旦到达目的地,我就需要将其重新转换回原来的ushort数组.

短数组

是长度为217,088的数组(分解图像512 x 424的1D数组).它存储为16位无符号整数.每个元素为2个字节.

字节数组

需要出于网络目的将其转换为字节数组.由于每个ushort元素值2个字节,因此我假设字节数组Length需要为217,088 * 2?

就转换然后正确地“取消转换”而言,我不确定如何执行此操作.

这适用于C#中的Unity3D项目.有人可以指出我正确的方向吗?

谢谢.

解决方法:

您正在寻找BlockCopy:

https://msdn.microsoft.com/en-us/library/system.buffer.blockcopy(v=vs.110).aspx

是的,short和ushort都是2个字节长;这就是为什么相应的字节数组应比初始短数组长两倍的原因.

直接(字节到短):

  byte[] source = new byte[] { 5, 6 };
  short[] target = new short[source.Length / 2];

  Buffer.BlockCopy(source, 0, target, 0, source.Length);

相反:

  short[] source = new short[] {7, 8};
  byte[] target = new byte[source.Length * 2]; 
  Buffer.BlockCopy(source, 0, target, 0, source.Length * 2);

使用偏移量(Buffer.BlockCopy的第二个和第四个参数),您可以分解一维数组(如您所说):

  // it's unclear for me what is the "broken down 1d array", so 
  // let it be an array of array (say 512 lines, each of 424 items)
  ushort[][] image = ...;

  // data - sum up all the lengths (512 * 424) and * 2 (bytes)
  byte[] data = new byte[image.Sum(line => line.Length) * 2];

  int offset = 0;

  for (int i = 0; i < image.Length; ++i) {
    int count = image[i].Length * 2;

    Buffer.BlockCopy(image[i], offset, data, offset, count);

    offset += count;
  }

标签:byte,ushort,arrays,c
来源: https://codeday.me/bug/20191118/2029875.html