0

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

数字可能是

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

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

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

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

4

2 回答 2

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;
}
于 2013-05-18T10:55:56.613 回答
0

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

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

于 2013-05-18T11:17:10.477 回答