C# 从字节数组中获取第 2 个整数

C# getting 1st 2 integers out of a byte array

我有这样一个字节[]

byte[] buffer = new byte[1024];

这个字节[]可能有这样的值:

buffer = {0, 0, 0, 106, 0, 0, 0, 11, 64, 33, 50, 32, 32, 32, ....}

我正在尝试获取前 8 个字节,即:

0,0,0,106

0,0,0,11

,并将它们转换为整数,即 106 和 11。

我可以安全地假设前 8 个字节总是代表 2 个整数,就像上面的例子一样,它们是 106 和 11,它们采用 4 个字节的形式,第一个 3 是 0,就像上面的例子一样。

都是高低顺序的4字节有符号整数

如何在 C# 中执行此操作?

使用转换 class.

int myint1 = Convert.ToInt32(buffer[someIndex1]);
int myint2 = Convert.ToInt32(buffer[someIndex2]);

正如其他人所说,如果保证索引4和索引7具有非零字节,那么您可以直接插入它。

我会将您的 byte[] 转换为 MemoryStream(或将其保留为 Stream)。然后酌情使用 BinaryReader。如果字节顺序不正确:C# - Binary reader in Big Endian?

private static int BytesToInt(byte[] array, int startIndex){
    int toReturn = 0;
    for (int i = startIndex; i < startIndex + 4; i++)
    {
        toReturn = toReturn << 8;
        toReturn = toReturn + array[i];
    }
    return toReturn;
}

您只需访问索引 3 和 7:

int first = buffer[3];
int second = buffer[7];

存在从 byteint 的隐式转换。

这可能是由于以下原因:

I can safely assume that [...] they take form of 4 bytes with 1st 3 being 0's

因此您只需要每个 4 字节整数的最后一个字节。

一个简单的DIY功能:

int BytesToInt32(byte[] buff, int offset)
{
    return (buff[offset + 0] << 24)
         + (buff[offset + 1] << 16)
         + (buff[offset + 2] << 8)
         + (buff[offset + 3]);
}

然后:

buffer = {0, 0, 0, 106, 0, 0, 0, 11, 64, 33, 50, 32, 32, 32, ....};
int a = BytesToInt32(buffer, 0);
int b = BytesToInt32(buffer, 4);