我是一个有关从C#中读取数组中特定字节的问题的新手。我收到一个128字节长的数组响应,我希望读取并存储数组的前4个字节。我该怎么做?
我已经阅读了一些关于转移字节的帖子,但有点困惑,我希望能朝着正确的方向前进。
答案 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
运算符将数字x
,n
的位移到左侧。您实际上将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();