我有一个56字节的内存寄存器,我需要存储4个不同的数字。
数字可能是
0-99999
0-99999
0-99999
0-99999
我必须将它们存储在与单字节数组相同的寄存器中。问题是我不确定我需要如何在四个数字之间将其拆分,然后再根据它们的大小再读回四个不同的数字。
由于我只能在单个字节中存储最多255个,所以如何使用这些字节的组合来适应所有内容?
正如我之前提到的,它们不是固定大小,可以是0-99999。
答案 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)来说还不够大。