首页 > 解决方案 > 计算数组中的数字(运行长度解码)

问题描述

        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();

我是编程初学者。123 是某种类型的“标记”
我不知道如何进行这样的控制台输出:65 65 65 65 65 77 77 77 77 77 77 101 101 101 101
我将不胜感激

标签: c#arraysdecodingrun-length-encoding

解决方案


要解码任何东西,你真的需要一个关于那个东西什么的规范。在这种情况下,我可以推测

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

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

在伪代码中:

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

推荐阅读