将多组数字存储到字节数组中

时间:2013-05-18 10:48:07

标签: c# arrays memory-management byte

我有一个56字节的内存寄存器,我需要存储4个不同的数字。

数字可能是

0-99999
0-99999
0-99999
0-99999

我必须将它们存储在与单字节数组相同的寄存器中。问题是我不确定我需要如何在四个数字之间将其拆分,然后再根据它们的大小再读回四个不同的数字。

由于我只能在单个字节中存储最多255个,所以如何使用这些字节的组合来适应所有内容?

正如我之前提到的,它们不是固定大小,可以是0-99999。

2 个答案:

答案 0 :(得分:2)

由于你有足够的内存(参见blinkenlight的评论),我给每个数字三个字节。

public static uint Read3BE(byte[] data, int index)
{
    return data[index]<<16 | data[index+1]<<8 | data[index+2];
}

public static void Write3BE(byte[] data, int index, uint value)
{
    if((value>>24)!=0)
      throw new ArgumentException("value too large");
    data[index]=(byte)(value>>16);
    data[index+1]=(byte)(value>>8);
    data[index+2]=(byte)value;
}

答案 1 :(得分:0)

56个字节应该足以存储4个这样的数字。 Int32长度为4个字节,可以存储最多2,147,483,647的值。 因此,您的56字节内存寄存器只需要16(4x4)个字节。 您可以使用存储器寄存器的前16个字节存储这些值,并将剩余的40个字节保留为未使用状态。 要从寄存器读取和写入字节,可以使用BitConverter类。

我希望你不是指56位,在这种情况下你每个值有14位(16384),这对于你需要存储的最大值(99999)来说还不够大。