QP编码解码

  这个仍然是和读邮件相关的。
  规则大致是:除了换行符,其它任何8位长度的字节必须被表示成一个"="号加上高四位的十六进制数和低四位的十六进制数,十六进制数是用"0123456789ABCDEF"的ASCII字符码表示,其中"ABCDEF"都必须是大写;当8位长度的字节值在33至60(包括33和60),62至126(包括62和126)之间时,直接用该数据对应的ASCII码来表示。

  直接代码

  

 1         public static function encode(data:String, charset:String = "gb2312"):String
 2         {
 3             var bytes:ByteArray = new ByteArray();
 4             bytes.writeMultiByte(data, charset);
 5             return encodeByteArray(bytes);
 6         }
 7         
 8         public static function encodeByteArray(data:ByteArray):String
 9         {
10             if(data == null || data.length == 0)
11                 return "";
12             data.position = 0;
13             var len:int = data.length;
14             var output:String = "";
15             var inlineLen:int = 0;//每行长度
16             for(var i:int = 0; i<len; i++)
17             {
18                 var code:uint = data[i];
19                 if(code >= 33 && code <= 126 && code != "=".charCodeAt(0))// 介于 33 到 126 之间, 且c_copy[i]的值不为'='的时候, 直接输出
20                 {
21                     output += String.fromCharCode(data[i]);
22                     inlineLen++;
23                 }
24                 else// 其它的需编码为'='加两个字节的HEX码(大写)
25                 {
26                     output += "=";
27                     output += charToHex(data[i]);
28                     inlineLen += 3;
29                 }
30                 // 保证输出行不超过规定长度, 可在行尾加"=/r/n"序列作为软回车
31 //                if(inlineLen >= 73)
32 //                {
33 //                    output += "=\r\n";
34 //                    inlineLen = 0;
35 //                }
36             }
37             return output;
38         }

  在查到的规则里面说要加=/r/n来换行,不知道为什么要加,所以直接去掉。

  解码的时候也不对这个处理。

  预览:

  

   代码下载



 

转载于:https://www.cnblogs.com/v-miclin/archive/2013/03/11/2954244.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DPP是Differential Pulse Code Modulation(差分脉冲编码调制)的缩写,在视频编码中常用于编码预测误差,以减少数据量和提高压缩效率。下面对QP/C中的DPP例程进行讲解: DPP的编码过程如下: 1.读取当前帧和参考帧的像素数据。 2.将参考帧的像素数据与当前帧的像素数据进行差分运算,得到预测误差。 3.对预测误差进行量化,得到量化误差。 4.对量化误差进行编码,得到二进制码流。 DPP的解码过程如下: 1.读取参考帧的像素数据。 2.对二进制码流进行解码,得到量化误差。 3.对量化误差进行反量化,得到预测误差。 4.将参考帧的像素数据与预测误差进行加和,得到当前帧的像素数据。 在QP/C中,DPP的编码解码实现都在"DPP.C"文件中。其中,编码函数为"DppEncode",解码函数为"DppDecode"。 DppEncode函数的参数包括:当前帧的像素数据、参考帧的像素数据、图像宽度和高度、量化参数。 DppEncode函数的实现过程如下: 1.通过调用"GetDiff"函数,得到预测误差。 2.通过调用"Quantize"函数,对预测误差进行量化,得到量化误差。 3.通过调用"WriteCode"函数,对量化误差进行编码,得到二进制码流。 DppDecode函数的参数包括:参考帧的像素数据、图像宽度和高度、量化参数、二进制码流。 DppDecode函数的实现过程如下: 1.通过调用"ReadCode"函数,对二进制码流进行解码,得到量化误差。 2.通过调用"Dequantize"函数,对量化误差进行反量化,得到预测误差。 3.通过将参考帧的像素数据与预测误差进行加和,得到当前帧的像素数据。 综上所述,DPP在视频编码中起到了重要的作用,能够有效地减少数据量和提高压缩效率。在QP/C中,DPP的实现也相对简单,通过差分运算、量化、熵编码和反量化等步骤,实现了对预测误差的编码解码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值