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];
存在从 byte
到 int
的隐式转换。
这可能是由于以下原因:
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);
我有这样一个字节[]
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];
存在从 byte
到 int
的隐式转换。
这可能是由于以下原因:
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);