Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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# 如何在结构数组上运行rle算法?_C#_Struct_Run Length Encoding - Fatal编程技术网

C# 如何在结构数组上运行rle算法?

C# 如何在结构数组上运行rle算法?,c#,struct,run-length-encoding,C#,Struct,Run Length Encoding,我有一堆结构数组。每个结构包含3个字节和一个sbyte 为了便于理解,这里有一个小代码 public class Container { public A[] structs; } public struct A { public byte a; public byte b; public byte c; public sbyte d; public A(byte a, byte b, sbyte d) { this.a

我有一堆结构数组。每个结构包含3个字节和一个sbyte

为了便于理解,这里有一个小代码

public class Container
{
    public A[] structs;
}

public struct A
{
    public byte a;
    public byte b;
    public byte c;
    public sbyte d;

    public A(byte a, byte b, sbyte d)
    {
       this.a = a;
       this.b = b;
       this.c = b;
       this.d = d;
    }
}
现在我有很多这样的结构,因此我想使用RLE来压缩它并使用更少的内存

启动程序时,一种方法会按程序生成变量值,然后对其执行计算。此后,阵列很少使用,但仍然需要“保持它们的活力”

我尝试使用二进制连接将结构转换为uint,但这不是最好的解决方案。我一直在考虑将值转换为字符串,但我认为这将是非常不共振的

没有办法用字节代替sbytes

您认为使用RLE压缩阵列的最佳解决方案是什么? 提前谢谢

没有办法用字节代替sbytes

为什么??您可以将
sbyte
强制转换为
byte
并向后转换

保存数据,如
uint
,并在需要时生成结构

public struct A
{
    public byte a;
    public byte b;
    public byte c;
    public sbyte d;

    public A(uint value)
    {
       this.a = (byte)(value >> 24);
       this.b = (byte)(value >> 16);
       this.c = (byte)(value >> 8);
       this.d = (sbyte)value;
    }

    public uint Value => (uint)this.a << 24 | (uint)this.b << 16 | (uint)this.c << 8 | (uint)this.d;
}
公共结构A
{
公共字节a;
公共字节b;
公共字节c;
公共SBD;
公共A(单位价值)
{
这个.a=(字节)(值>>24);
this.b=(字节)(值>>16);
this.c=(字节)(值>>8);
这个.d=(sbyte)值;
}

公共uint值=>(uint)这就是。a所以我想确认一下,你有很多这种类型的值,比如在数组或类似的集合中,而且很多值都有相同的值?没错。实际上80%的值都是相同的,这就是我想将结构转换为UINT的原因,因为它可以被更有效地压缩。但是UINT无法处理sbytes.当你说80%的值时,是否会像字节1-4相同,第5字节不同,6-9与字节1-4相同,第10字节不同?这些80/20%是如何分布的?这里的模式是什么?让我自己更正一下。在数组中,80%的结构是相同的。