Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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# 计算数组中的数字(运行长度解码) int[]字节=新的int[9]{123,5,65,123,6,77,123,4,101}; 整数计数=1; for(int i=1;i_C#_Arrays_Decoding_Run Length Encoding - Fatal编程技术网

C# 计算数组中的数字(运行长度解码) int[]字节=新的int[9]{123,5,65,123,6,77,123,4,101}; 整数计数=1; for(int i=1;i

C# 计算数组中的数字(运行长度解码) int[]字节=新的int[9]{123,5,65,123,6,77,123,4,101}; 整数计数=1; for(int i=1;i,c#,arrays,decoding,run-length-encoding,C#,Arrays,Decoding,Run Length Encoding,我是编程的初学者。 123是某种类型的“标记” 我不知道如何进行这样的控制台输出:656565777777101101 如果您能帮助我破译任何东西,我将不胜感激,您确实需要一份关于该东西是什么的规范。在这种情况下,我可以推测: 123表示“以下两个字节X和Y应解释为有效负载Y的X实例(0-255)” 因此,如果不是123,您将解析一个字节:放弃,因为您没有任何其他规则可遵循,否则,读取X和Y,并输出值Y的X个副本 在伪代码中: int[] bytes = new int[9]

我是编程的初学者。 123是某种类型的“标记”

我不知道如何进行这样的控制台输出:656565777777101101

如果您能帮助我破译任何东西,我将不胜感激,您确实需要一份关于该东西是什么的规范。在这种情况下,我可以推测:

  • 123表示“以下两个字节X和Y应解释为有效负载Y的X实例(0-255)”

因此,如果不是123,您将解析一个字节:放弃,因为您没有任何其他规则可遵循,否则,读取X和Y,并输出值Y的X个副本

在伪代码中:

        int[] bytes = new int[9] { 123, 5, 65, 123, 6, 77, 123, 4, 101 };       
        int count = 1;          
        for (int i = 1; i < bytes.Length; i++)
        {
            
            if (bytes[i] == 123)
            {
                count++;              
            }
            else
            {
                Console.WriteLine(bytes[i]);
            }
        }
        Console.ReadLine();

“我不知道如何做这样的控制台输出:65 65 65 65 77 77 77 101 101”老实说,我也是。这是某种类型的吗?你到底有什么问题?什么有效,什么无效?从上面的代码中,您实际得到的结果是什么?如果是运行长度编码,那么您肯定需要首先获得希望重复的次数,然后再获得要重复的字节?这些是不同的元素,因此第一次迭代将给出所需的数量,然后第二次迭代将给出要重复的字节。然后你需要一个循环来重复那个字节的次数。“在这种情况下,我可以推测:”我们真的应该这样做吗?@HimBromBeere,只要我们指出这是推测,并注意我们应该真正检查规范中说的:当然“如果不是123:放弃,因为你没有任何其他规则可以遵循”-好的,基于标志的RLE的标准是,遇到的任何与标志模式不匹配的内容都可以被视为未压缩,只需复制即可。我的意思是,否则,即使是123字节也没有意义;如果所有预期数据都是长度-值对,则不需要任何标记。
while(TryTakeByte(out val)))
    switch val
        123:
            if (!TryTakeByte(out x) || !TryTakeByte(out y)) FailEndOfStream()
            for (i from 0 to x)
                write y
        default:
            FailNoClueWhatToDo() // refer to protocol specification