PackBits算法
来源:互联网 发布:淘宝基金欠款 编辑:程序博客网 时间:2024/06/05 23:39
位压缩算法是一种应用于数据长度编码的快速,简单无损的数据压缩方案。
苹果公司在Mactionsh计算机上首先推出的这种算法。这是一种可以用在TIFF文件上的压缩算法。TAG文件也使用这种RLE压缩方案,但是其将数据视为像素而不是字节。
一个压缩位数据流是以一个字节的头(header),后接数据(data)的形式组织数据:数据可以被标记,不标记或者进行压缩。在下面的表中,n是被做了标记的Data的数据个数。
注意:压缩解压缩的时候将0作为负数或者整数无影响。连个相近的字节被视为是文本数据。另外也需要注意的是,根据位压缩算法并不能决定数据流是否终止。换句话说:在进行压缩或者解压缩的时候必须事先知道数据的长度。
苹果公司提供了如下简短压缩后的数据:FE AA 02 80 00 2A FD AA 03 80 00 2A 22 F7 AA
依据压缩算法,相应的解压缩算法:(VB)代码如下:
Sub UnpackBitsDemo()
Dim File As Variant
Dim MyOutput As String
Dim Count As Long
Dim i As Long, j As Long
File = "FE AA 02 80 00 2A FD AA 03 80 00 2A 22 F7 AA"
File = Split(File, " ")
For i = LBound(File) To UBound(File)
Count = Application.WorksheetFunction.Hex2Dec(File(i))
Select Case Count
Case Is >= 128
Count = 256 - Count 'Two's Complement
For j = 0 To Count 'zero-based
MyOutput = MyOutput & File(i + 1) & " "
Next j
i = i + 1 'Adjust the pointer
Case Else
For j = 0 To Count 'zero-based
MyOutput = MyOutput & File(i + j + 1) & " "
Next j
i = i + j 'Adjust the pointer
End Select
Next i
Debug.Print MyOutput
'AA AA AA 80 00 2A AA AA AA AA 80 00 2A 22 AA AA AA AA AA AA AA AA AA AA
End Sub
JS的实例如下:
/**
* Helper functions to create readable input and output
*
* Also, see this fiddle for interactive PackBits decoder:
* https://jsfiddle.net/volter9/tj04ejdt/
*/
function str2hex (str) {
return str.split('').map(function (char) {
var value = char.charCodeAt(0);
return ((value < 16 ? '0' : '') + value.toString(16)).toUpperCase();
}).join(' ');
}
function hex2str (hex) {
return hex.split(' ').map(function (string) {
return String.fromCharCode(parseInt(string, 16));
}).join('');
}
/**
* PackBits unpack function
*
* @param {String} data
* @return {String}
*/
function unpackBits (data) {
var output = '',
i = 0;
while (i < data.length) {
var hex = data.charCodeAt(i);
if (hex >= 128) {
hex = 256 - hex;
for (var j = 0; j <= hex; j ++) {
output += data.charAt(i + 1);
}
i ++;
}
else {
for (var j = 0; j <= hex; j ++) {
output += data.charAt(i + j + 1);
}
i += j;
}
i ++;
}
return output;
}
var original = 'FE AA 02 80 00 2A FD AA 03 80 00 2A 22 F7 AA',
data = unpackBits(hex2str(original));
// Output is: AA AA AA 80 00 2A AA AA AA AA 80 00 2A 22 AA AA AA AA AA AA AA AA AA AA
console.log(str2hex(data));
阅读全文
0 0
- PackBits算法
- 关于PackBits压缩算法-Apple Macintosh PackBits scheme
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 算法
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
- 前端开发-数据分页请求和删除
- JPA动态查询代码封装
- HTTPS的配置
- spark mllib源码分析之随机森林(Random Forest)(五)
- PackBits算法
- linux top命令中各cpu占用率含义及案例分析
- Masonry 自动布局使用案例
- React this.state
- C#之转义符
- codeforces——581A——Vasya the Hipster
- 介绍几种简单的文件加密方法,挺有意思的
- 使用VirtualBOX自带的共享文件夹功能
- Data Structures and algorithm analysis—1.2.4&1.2.5Modular Arithmeti&The P Word(数据结构—模数运算&P字)