【问题标题】:C# getting 1st 2 integers out of a byte arrayC# 从字节数组中获取第一个 2 个整数
【发布时间】:2019-02-20 17:56:26
【问题描述】:

我有一个这样的字节[]

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# 中做到这一点?

【问题讨论】:

标签: c# arrays bitconverter


【解决方案1】:

一个简单的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);

【讨论】:

    【解决方案2】:

    您只需要访问索引 3 和 7:

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

    存在从 byteint 的隐式转换。

    这可能是由于以下原因:

    我可以放心地假设 [...] 它们采用 4 字节的形式,1st 3 为 0

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

    【讨论】:

    • @user6f6e65 是的,我错过了什么?
    • 他希望将前 4 个字节组合成一个 32 位的 int。 转换字节
    • @user6f6e65 由于前三个字节始终为零,因此每个整数只需要最后一个字节。
    • 这很讽刺,因为我没有仔细阅读这个问题。妈。你得到我的支持
    • @user6f6e65 别担心哈哈
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:
      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;
      }
      

      【讨论】:

        【解决方案5】:

        使用转换类。

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

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

        【讨论】:

          猜你喜欢
          • 2011-12-08
          • 1970-01-01
          • 2017-09-12
          • 2021-03-14
          • 1970-01-01
          • 1970-01-01
          • 2023-03-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多