从字节数组C#中读取特定字节

时间:2014-01-23 15:18:12

标签: c# arrays

我是一个有关从C#中读取数组中特定字节的问题的新手。我收到一个128字节长的数组响应,我希望读取并存储数组的前4个字节。我该怎么做?

我已经阅读了一些关于转移字节的帖子,但有点困惑,我希望能朝着正确的方向前进。

5 个答案:

答案 0 :(得分:4)

使用其中一个Array.Copy重载:

byte[] bytes = new byte[4];

Array.Copy(originalArray, bytes, bytes.Length);

答案 1 :(得分:2)

使用Array.Copy方法:

// your original array
var sourceArray = new byte[128];

// create a new one with the size you need
var firstBytes = new byte[4];

// copy the required number of bytes.
Array.Copy(sourceArray, 0, firstBytes, 0, firstBytes.Length);

如果你不需要原始数组中的其余数据,你也可以调整它的大小,截断前4个字节后的所有内容:

Array.Resize(ref sourceArray, 4);

答案 2 :(得分:1)

读取4个不同变量中的前4个字节:

byte first = array[0],
    second = array[1],
    third = array[2],
    forth = array[4];

将它们作为一个32位长整数读取:

int result = 
    first << 24 ||
    second << 16 ||
    third << 8 ||
    forth;

x << n运算符将数字xn的位移到左侧。您实际上将first 24个位置的字节向左移动,因此first将存储在索引为24到31的位中,如下所示:

first 00000000 00000000 00000000

接下来,向左移动second 16个位置,从而将其存储在位16到23中,依此类推:

first second 00000000 00000000
如果您需要更多详细信息,

Wikipedia可提供按位操作的完美摘要。

答案 3 :(得分:0)

来自网络流的示例。

byte[] bytesRead = 0;
using (NetworkStream stream = client.GetStream())
{
    byte[] length = new byte[4];
    bytesRead = stream.Read(length, 0, 4);
}

bytesRead包含存储在网络流中的前4个字节。

答案 4 :(得分:0)

您可以使用Take方法。虽然,这仅在您使用.NET 3.5或更高版本时可用。您需要在.cs文件的顶部添加using System.Linq;

var bytes = originalArray.Take(4).ToArray();