游程编码的解码逻辑

游程编码的解码逻辑
第一个字节允许值0到15,17,18。
是0到15,记录目标值,计数为1。
是16,报错。
是17,18,目标值为0。暂时不计数。
第二字节到倒数第二字节。
是0到15,分两种情况,一种是计数器,另一种是普通数值,判定条件是前一个字节的数值大于15是计数器。否则是普通数值。
如果是计数器,累加计数值
如果是普通数值,与之前的数值对比,如果相同,累加计数,如果不同,输出之前的序列,并且新数值计数为1。
是16,之前目标数值是非0值不处理,是0,则报错。
是17和18,之前目标数值是0值,不处理,是非0值,输出之前的序列。
最后一个字节,在做之前的工作后,打印这个最后字节的序列。
function  code_left()
{var input=[4,16,1,3,3,3,6,16,3,16,0,17,3,2,16,0];
var result=[];
var  target_val=0;
var  count=0;
for(var i=0;i<input.length;i++)
 {
   if(i==0)
     {
       if(input[i]<16){target_val=input[0];
       count=1;}
       else if(input[i]>16)
        {target_val=0;}
     }
   else
     {if(input[i-1]>15)
       {
          if(input[i-1]==18){count=count+input[i]+11;}
          else{count=count+input[i]+3;}
        }
      else
        {
           if(input[i]==target_val)
            {count=count+1;}
            else
{result=write_array(result,target_val,count);
count=1;
target_val=input[i];
}
         }
     }
    if(i==input.length-1)
     {
result=write_array(result,target_val,count);
     }
 }
}

//
function write_array(result,target_val,count)
{
var arr=result;
for(var i=0;i<count;i++)
{arr.push(target_val);}
return  arr;
}

    原文作者:游程编码问题
    原文地址: https://blog.csdn.net/gggwfn1982/article/details/85006636
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞