Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将多组数字存储到字节数组中_C#_Arrays_Memory Management_Byte - Fatal编程技术网

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

C# 将多组数字存储到字节数组中,c#,arrays,memory-management,byte,C#,Arrays,Memory Management,Byte,我有一个56字节大的内存寄存器,我有4个不同的数字需要存储在寄存器中 数字可能是 0-99999 0-99999 0-99999 0-99999 我必须将它们作为单字节数组存储在同一个寄存器中。问题是,我不确定我需要如何将它分成四个数字,然后根据它们的大小将其作为四个不同的数字重新读取 由于我只能将最多255个字节存储到一个字节中,如何使用这些字节的组合来容纳所有内容 正如我前面提到的,它们的大小不是固定的,可以在0-99999之间。因为您有足够的内存可用(请参阅blinkenlight的注释

我有一个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;
}
公共静态uint Read3BE(字节[]数据,int索引)
{
返回数据[索引]16);
数据[索引+1]=(字节)(值>>8);
数据[索引+2]=(字节)值;
}

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


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

4个数字对应56个字节,即每个数字对应14个字节或112位。0..99999范围只需要17位,因此有足够的存储空间。你甚至可能会浪费时间,给每个数字分配32位来使用
Int32
内存布局。这完全是开箱即用的!(几乎,需要一个演员)非常感谢你的快速解决方案。