c# - 计算数组中的数字(运行长度解码)
问题描述
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
我将不胜感激
解决方案
要解码任何东西,你真的需要一个关于那个东西是什么的规范。在这种情况下,我可以推测:
- 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
推荐阅读
- python - OSX Python:pip 命令返回“SyntaxError:无效语法”
- c++ - SFINAE 不适用于复制构造函数
- r - 如何根据即使只有一个重复项在另一列中具有特定值来删除列的所有重复行
- shell - 将变量传递给 SSH
- awk - 在 AWK 中将标志之间的多行合并到一行中
- python - 从列表中的列表中提取唯一的字符串值
- icloud - 在 MacOs 上登录 Macbook Pro 时 iCloud 身份验证未知错误
- esbuild - 当目标是 es2020 时,类是使用 '_'(下划线)前缀生成的,但在没有任何目标的情况下也能正常工作
- r - 在 R 中为 str_extract_all 使用变量输入
- c - 递归函数返回分段错误