void gpsValueStrToByte(uint8_t* bytes, char* gpsValueStr)
{
/*
在double为4字节的单片机上,将gps值转成8字节double数据,尽可能地保留精度
float: 0 1-8 9-31
符号位 指数+127 尾数位 (尾数部分省略小数点前面的 1 )
double: 0 1-11 12-63
符号位 指数+1023 尾数位 (尾数部分省略小数点前面的 1 )
gps数据格式 dddmm.mmmmm d 表示度数位,m 为分数位 转换成度数对应的8字节又精度数:ddd+(mm.mmmmm/60.0)
转换思路:
1. 将gps数据分解为:度数整数部分ddd, 分数整数部分mm, 分数小数部分+1.0: 1.mmmmm 分别保存
(加1.0的目的是为了保证尾数部分在后续计算中可以直接使用,因为1恰好是被省略的那一位)
2. 将分值部分的整数部分和小数部分拼装并调整指数8字节double形式
3. 执行分值部分除以60.0操作,(1/60.0的指数为-6,尾数部分二进制大概为:1.000100010001000100010001000100010001000100010001000 采用右移相加的方法执行双精度除法)
4. 上一步结果得到的度数的小数部分值+1.0得到