C#将字节数组重新解释为短裤数组

时间:2019-03-31 08:26:46

标签: c#

如果可能,我想在C#中复制以下C逻辑:

void f(unsigned char *byteArr)
{
  short *shArr = (short*)byteArr; // shArr[0] = -8, shArr[1] = -265
}
unsigned char byteArr[4];
byteArr[0] = 248;
byteArr[1] = 255;
byteArr[2] = 247;
byteArr[3] = 254;
f(byteArr);

所以在C#中,我有

void f(byte[] byteArr)
{
  short[] shArr = ?
}

,并希望shArr为{-8, -265}。 (怎么可能)?

2 个答案:

答案 0 :(得分:2)

显然,您想将字节数组重新解释为短裤数组。

最简单的方法是使用Span

static void Main(string[] args)
{
    byte[] byteArr = new byte[] { 248, 255, 247, 254 };

    Console.WriteLine(byteArr[2]);
    f(byteArr);
    Console.WriteLine(byteArr[2]);
}

private static void f(byte[] byteArr)
{
    Span<short> shArr = MemoryMarshal.Cast<byte, short>(byteArr);

    shArr[1] = 42;
}   

但是实际的问题是,您是否actually need首先要这样做。

答案 1 :(得分:0)

使用Buffer.BlockCopy

var shArr = new short[byteArr.Length / 2];
Buffer.BlockCopy(byteArr, 0, shArr, 0, byteArr.Length);

https://dotnetfiddle.net/b9ZolZ