我有一个 56 字节大的内存寄存器,我需要在寄存器中存储 4 个不同的数字。
数字可能是
0-99999
0-99999
0-99999
0-99999
我必须将它们作为单字节数组存储在同一个寄存器中。问题是我不确定如何在四个数字之间拆分它,然后根据它们的大小再次将其读回四个不同的数字。
由于我最多只能将 255 存储到单个字节中,我如何使用这些字节的组合来适应所有内容?
正如我之前提到的,它们不是固定大小,范围可以从 0 到 99999。
我有一个 56 字节大的内存寄存器,我需要在寄存器中存储 4 个不同的数字。
数字可能是
0-99999
0-99999
0-99999
0-99999
我必须将它们作为单字节数组存储在同一个寄存器中。问题是我不确定如何在四个数字之间拆分它,然后根据它们的大小再次将其读回四个不同的数字。
由于我最多只能将 255 存储到单个字节中,我如何使用这些字节的组合来适应所有内容?
正如我之前提到的,它们不是固定大小,范围可以从 0 到 99999。
由于您有足够的内存可用(请参阅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;
}
56 个字节应该足以存储 4 个这样的数字。An 的Int32
长度为 4 个字节,最多可存储 2,147,483,647 个值。因此,您的 56 字节内存寄存器只需要 16 (4x4) 字节。您可以使用内存寄存器的前 16 个字节来存储这些值,而剩余的 40 个字节不用。要在寄存器中读取和写入字节,您可以使用BitConverter
该类。
我希望您不是指 56 位,在这种情况下,每个值都有 14 位(16384),这对于您需要存储的最大值(99999)来说不够大。