KIWI文件解析代码

该博客详细介绍了如何解析KIWI文件,包括转换二进制数据、处理PID结构和存储信息。通过一系列函数,如change()、pid_f()和ALLDATA_f(),将文件内容转换并存储在内存中,然后输出关键信息,如经纬度、楼层和日期。整个过程分为多个部分,分别处理不同部分的数据。
摘要由CSDN通过智能技术生成
 

#include "define.h"

//********************************************************************************************************//

/**********************************************************************************************************
   change函数: 日期:  2011年7月10号;
                作用:  将读取的内容转换成二进制,并储存在二维数组中
   
**********************************************************************************************************/

void change(int t)
{
    int i;
 memset(b, 0, sizeof(b));               //先对数组进行初始化
 for (i = 0; i < t; i ++)
 {
  b[i][7] = temp[i] & 0x01;           //最低位//
  b[i][6] = ( temp[i] & 0x02) >> 1;
  b[i][5] = ( temp[i] & 0x04) >> 2;
  b[i][4] = ( temp[i] & 0x08) >> 3;
  b[i][3] = ( temp[i] & 0x10) >> 4;
  b[i][2] = ( temp[i] & 0x20) >> 5;
  b[i][1] = ( temp[i] & 0x40) >> 6;
  b[i][0] = ( temp[i] & 0x80) >> 7;   //最高位//
 }
}

//********************************************************************************************************//

/**********************************************************************************************************
    struct PID pid_f函数:  日期:
                         作用:
   
**********************************************************************************************************/

struct PID pid_f(int a[][8])
{
    struct PID pid;
 int wt[32], jt[32];
 int i, j, k, num;
 
 for (i = 0, k = 0; i < 4; i++)
 {
  for (j = 0; j < 8; j++)
  {
   wt[k++] = a[i][j];
  }
 }
 
 for (i = 4, k = 0; i < 8; i++)
 {
  for (j = 0; j < 8; j++)
  {
   jt[k++] = a[i][j];
  }
 }
 num = 0;
 
 for (i = 1; i <= 20; i++)
 {
  num += wt[i] * (int)pow(2, 20 - i);
 }
 
 if (wt[0] == 0) {
  pid.wd.flag = 0;
 } else {
  pid.wd.flag = 1;
 }
 
 pid.wd.d = num / 3600;
 pid.wd.f = (num % 3600) / 60;
 pid.wd.m = (num % 3600) % 60 + (wt[21] * 4 + wt[22] * 2 + wt[23]) / 8;
 num = 0;
 
 for (i = 1; i <= 20; i++)
 {
  num += jt[i] * (int)pow(2, 20 - i);
 }
 
 if (jt[0] == 0) {
  pid.jd.flag = 0;
 } else {
  pid.jd.flag = 1;
 }
 
 pid.jd.d = num / 3600;
 pid.jd.f = (num % 3600) / 60;
 pid.jd.m = (num % 3600) % 60 + (jt[21] * 4 + jt[22] * 2 + jt[23]) / 8;
 return pid;
}

//********************************************************************************************************//

/**********************************************************************************************************
   ALLDATA_f函数:   日期:
                     作用:
   
**********************************************************************************************************/

 


void ALLDATA_f(FILE *fp, FILE *fp2)
{
    char infor[6][100]; // 准备输出到界面 //
 struct MID mid;
 int i, j, k, num, asc, sum;
 memset(temp, 0, sizeof(temp));

 //****************************************************************************************************//

 fread(temp, sizeof(char), 64, fp);              // part:1 //
 change(64);
 mid.pid = pid_f(b);  // pid function //
 
 if (mid.pid.wd.flag == 0) {
  fprintf(fp2, "North: ");
 } else {
  fprintf(fp2, "South: ");
 }
 
 fprintf(fp2, "%d'%d'%.3lf''\n", mid.pid.wd.d, mid.pid.wd.f, mid.pid.wd.m);
 
 if (mid.pid.jd.flag == 0) {
  fprintf(fp2, "East: ");
 } else {
  fprintf(fp2, "West: ");
 }
 
 fprintf(fp2, "%d'%d'%.3lf''\n", mid.pid.jd.d, mid.pid.jd.f, mid.pid.jd.m);
 mid.floor = 0;
 
 for (i = 0; i < 8; i++)
 {
  mid.floor += b[8][i] * (int)pow(2, 7-i);
 }
 
 fprintf(fp2, "FLOOR: %d\n", mid.floor);
 mid.res = 0;
 mid.date = 0;
 
 for (i = 0; i < 16; i++)
 {
  mid.date += b[10][i] * (int)pow(2, 15 - i);
 }
 fprintf(fp2, "DATE: %d\n", mid.date);
 for (i = 12; i < 64; i++)
 {
  asc = 0;
  for (j = 0; j < 8; j++)
  {
   asc += b[i][j] * (int)pow(2, 7 - j);
  }
  fprintf(fp2, "%c", asc);
 }
 fprintf(fp2, "\n");
 memset(temp, 0, sizeof(temp));

 //****************************************************************************************************//

 fread(temp, sizeof(char), 64, fp);         // part:2 //
 change(64);
 mid.pid = pid_f(b); // pid function //
 
 if (mid.pid.wd.flag == 0) {
  fprintf(fp2, "North: ");
 } else{
  fprintf(fp2, "South: ");
 }
 
 fprintf(fp2, "%d'%d'%.3lf''\n", mid.pid.wd.d, mid.pid.wd.f, mid.pid.wd.m);
 
 if (mid.pid.jd.flag == 0) {
  fprintf(fp2, "East: ");
 } else {
  fprintf(fp2, "West: ");
 }
 
 fprintf(fp2, "%d'%d'%.3lf''\n", mid.pid.jd.d, mid.pid.jd.f, mid.pid.jd.m);
 mid.floor = 0;
 for (i = 0; i < 8; i++)
 {
  mid.floor += b[8][i] * (int)pow(2, 7-i);
 }
 fprintf(fp2, "FLOOR: %d\n", mid.floor);
 mid.res = 0;
 mid.date = 0;
 for (i = 0; i < 16; i++)
 {
  mid.date += b[10][i] * (int)pow(2, 15 - i);
 }
 fprintf(fp2, "DATE: %d\n", mid.date);
 for (i = 12; i < 64; i++)
 {
  asc = 0;
  for (j = 0; j < 8; j++)
  {
   asc += b[i][j] * (int)pow(2, 7 - j);
  }
  fprintf(fp2, "%c", asc);
 }
 fprintf(fp2, "\n");
 memset(temp, 0, sizeof(temp));

 //****************************************************************************************************//

 fread(temp, sizeof(char), 32, fp);    // part:3 //
 change(32);
 mid.pid = pid_f(b); // pid function //
 
 if (mid.pid.wd.flag == 0) {
  fprintf(fp2, "North: ");
 } else {
  fprintf(fp2, "South: ");
 }
 
 fprintf(fp2, "%d'%d'%.3lf''\n", mid.pid.wd.d, mid.pid.wd.f, mid.pid.wd.m);
 
 if (mid.pid.jd.flag == 0) {
  fprintf(fp2, "East: ");
 } else {
  fprintf(fp2, "West: ");
 }

 fprintf(fp2, "%d'%d'%.3lf''\n", mid.pid.jd.d, mid.pid.jd.f, mid.pid.jd.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值