二进制、十六进制和浮点数ASCII的转换机制--------IEEE754

我在使用GPS时,通过网口接收到了BESTPOS格式的输出结果,它以16进制表示。
当前常见的GPS都以ASCII表示,例如我们在串口助手中可以选择输出类型为ASCII或者是16进制,那么说明它们中见肯定存在某种转换机制,既可以表示出正负号、也可以表示出小数点后的数字,它就是IEEE754


下面是一段BESTPOS十六进制的GPS数据:
AA 44 12 1C 2A 00 00 20 48 00 00 00 8B 78 74 07 50 8F B5 06 00 00 44 00 F6 B1 2C 36 00 00 00 00 10 00 00 00 2C B3 31 89 16 0A 44 40 2B A7 F9 0F 0F 0F 5D 40 00 00 6A 14 45 1A 4E 40 33 33 1B C1 3D 00 00 00 C3 BC 3A 40 71 19 6F 40 DB 2A ED 40 00 00 00 00 00 00 00 00 00 00 00 00 08 06 06 00 00 00 00 01 27 AD 7C 33


BESTPOS数据格式

header 28 bytes --------------
AA 44 12
1C=28=>28 bytes header(Header Lgth)
2A 00=42=>bestposa(page 375 of 129 Rev8)
00=0=>Binary
20=32=>com1(page 28 of 20000129 Rev8)
48 00=>72(不包含header以及CRC的主体数据共有72个字节)
00 00=>0(Sequence)
8B=>139(Idle Time)
78=120=>COARSESTEERING(Time Status)
74 07=>1908(GPS reference week number)
50 8F B5 06=> 112562000ms
00 00 44 00(Receiver Status)
F6 B1 (Reserved)
2C 36 (Receiver S/W Version)

------------------data 76 bytes ----------------------------
00 00 00 00=0= SOL_COMPUTED
10 00 00 00= SINGLE
2C B3 31 89 16 0A 44 40=40.0788125(lat)
2B A7 F9 0F 0F 0F 5D 40=116.235294(lon)
00 00 6A 14 45 1A 4E 40= 60.205233(hgt)
33 33 1B C1=-273612.796875(undulation)
3D 00 00 00=WGS84(datum id#)
C3 BC 3A 40=2.9177711009979248046875(lat )
71 19 6F 40=1.7359278202056884765625(lon )
DB 2A ED 40=3.411481380462646484375 (hgt )
00 00 00 00 (stn id)
00 00 00 00 (diff_age)
00 00 00 00 (sol_age)
08(#SVs)
06(#solnSVs)
06(#solnL1SVs)
00(#solnMultiSVs)
00(Reserved)
00 (ext sol stat)
00(Galileo and BeiDousig mask)
01(GPS andGLONASS sigmask)
27 AD 7C 33=校验位


关键的东西来了


64位双精度浮点数规格化表示

X= (-1)s ×(1.M)× 2E-1023
在这里插入图片描述

实例一:现针对BESTPOSA中的十六进制纬度“2C B3 31 89 16 0A 44 40”做以转换,实例如下:
1、将“2C B3 31 89 16 0A 44 40”从右至左,从高位至低复写一遍:40 44 0A 16 89 31 B3 2C

2、将“40 44 0A 16 89 31 B3 2C”写成二进制“01000000 01000100 00001010 00010110 10001001 00110001 10110011 00101100”

3、01000000 01000100 00001010 00010110 10001001 00110001 10110011 00101100该二进制数据中红色字体“0”代指符号位S,11位绿色二进制字体“1000000 0100”代指含阶符的阶码E,52位蓝色二进制字体“0100 00001010 00010110 10001001 00110001 10110011 00101100”代指尾数M。

4、根据公式X= (-1)s×(1.M)× 2E-1023 ,
得知:5640591441507116,5626228431264431
(-1)s =(-1)0 =1
(1.M) 10=(10100 00001010 00010110 10001001 00110001 10110011 00101100) /(252)=1.2524628981729604149109036370646
E=(1000000 0100)=(1028),2(E-1023)=2(1028-1023)=25;
X= (-1)s ×(1.M)× 2(E-1023)=1×1.2524628981729604149109036370646×25= 40.078812741534733277148916386068

5、即的纬度为40.078812741534733277148916386068,同时bestposa语句里的64位双精度浮点数的经度和高度的算法同上。


我建议读者自己动手算一下,就会发现这规则还是很有意思的!遇到进制转换可以直接百度:在线进制转换器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值