关于AIS编码解码的两个小问题
2012-06-20 19:26
337 查看
看了happyparrot 的一篇关于AIS解码的文章http://blog.csdn.net/happyparrot/article/details/1585185,
发现有两个问题这里做下笔记,首先还是感激作者提供珍贵的资料,这些资料真不多见。
1、博文说“编码格式的目的一是为了压缩信息内容”是不正确的。
这个编码是将原始的每6比特映射到一个特定集合中的某个字符,即变为8了比特,数据量不是压缩了,相反是膨大了。
至于为什么要做这样的编码,我想可能是便于报文数据的发送和传输。
2、 关于那个奇怪的解码算法
outSix = inEight + 0x28; //加上101000
if(outSix > 0x80) //如果SUM>10000000
outSix += 0x20; //加上100000
else
outSix += 0x28; //加上101000
outSix = outSix<<2; //右移两位,获取LSB
由于映射的字符集合是个分段的,所以if(outSix > 0x80)是个分段点,
两段:[0x30, 0x57] 和 [ 0x60,0x77],分别将端点加0x28变为:
[0x58, 0x7F] 和 [ 0x88,0x9F]
注意一下第一段的分界点0x7F,就明白为什么用0x80做分支了。
然后各个分支中为什么又做加法?
按照转换表,直观思路应该是字符与0x57比较,小于减0x30,大于则减0x38,没错这个算法就是这样算的:
只是二进制中减法可以转换为加法运算,即减一个数等于加上这个数的负数的补码,即减0x30等于加上-0x30的补码。
0x30 : 0110000
-0x30: 1110000(1bit符号位+6bit数据位)
-0x30补码:10000000-0110000 = 1010000 = 0x50 = 0x28 + 0x28
0x38 : 0111000
-0x38: 1111000
-0x38补码:10000000-0111000 = 01001000 = 0x48 = 0x28 + 0x20
这下应该看清楚了吧!
发现有两个问题这里做下笔记,首先还是感激作者提供珍贵的资料,这些资料真不多见。
1、博文说“编码格式的目的一是为了压缩信息内容”是不正确的。
这个编码是将原始的每6比特映射到一个特定集合中的某个字符,即变为8了比特,数据量不是压缩了,相反是膨大了。
至于为什么要做这样的编码,我想可能是便于报文数据的发送和传输。
2、 关于那个奇怪的解码算法
outSix = inEight + 0x28; //加上101000
if(outSix > 0x80) //如果SUM>10000000
outSix += 0x20; //加上100000
else
outSix += 0x28; //加上101000
outSix = outSix<<2; //右移两位,获取LSB
由于映射的字符集合是个分段的,所以if(outSix > 0x80)是个分段点,
两段:[0x30, 0x57] 和 [ 0x60,0x77],分别将端点加0x28变为:
[0x58, 0x7F] 和 [ 0x88,0x9F]
注意一下第一段的分界点0x7F,就明白为什么用0x80做分支了。
然后各个分支中为什么又做加法?
按照转换表,直观思路应该是字符与0x57比较,小于减0x30,大于则减0x38,没错这个算法就是这样算的:
只是二进制中减法可以转换为加法运算,即减一个数等于加上这个数的负数的补码,即减0x30等于加上-0x30的补码。
0x30 : 0110000
-0x30: 1110000(1bit符号位+6bit数据位)
-0x30补码:10000000-0110000 = 1010000 = 0x50 = 0x28 + 0x28
0x38 : 0111000
-0x38: 1111000
-0x38补码:10000000-0111000 = 01001000 = 0x48 = 0x28 + 0x20
这下应该看清楚了吧!
相关文章推荐
- 关于java备注乱码的问题,两个工程默认的编码不一样
- C#关于编码、解码相关问题
- 关于URL 解码 编码问题
- C#关于编码、解码相关问题
- 关于编码(一):url的编码和解码问题
- 关于串口发送16进制编码及解码问题
- 关于jvm中字符串的编码解码导致的乱码问题
- JavaEE细节问题03——关于服务器和浏览器的编码解码
- 关于脚本语言PERL的两个笔记(编码问题,未完全解决)
- 关于web请求中的编码解码问题
- C#关于编码、解码相关问题
- 关于BASE64Encoder和BASEDecoder的编码和解码问题
- 关于ios编码解码问题
- 关于编程中编码和解码的问题
- 看到两个写的很好的关于字符集,编码的文章,推荐大家看看,另外纠正了一下原文中的小bug(UTF-8 UniCode UTF-16 UCS 等)
- 关于网络程序编写的两个问题
- 关于Java EE项目GET,POST中文编码问题
- 关于Html编码问题,例如字符:·
- 有关于MP3音频文件的编码解码资料吗