首页 > 其他分享 >RTCM数据包编码

RTCM数据包编码

时间:2024-04-10 15:57:45浏览次数:25  
标签:编码 00 RTCM SetRTCM3Data 0x12 rtcmbytes byte 数据包 size

 

uint8_t rtcmbytes[1200] = {0};
uint32_t rtcm_size = 0;
static uint32_t SetRTCM3Data(uint64_t data, uint8_t bits, uint8_t *rtcmbytes, uint8_t end_flag)
{
    static uint32_t nbyte = 0;
    uint32_t temp_nbyte = 0;

    static uint64_t byte = 0;
    static uint8_t bitsbyte = 0;

    static uint32_t len = 0;

    bitsbyte += bits;
    byte = byte|((data)<<(64-bitsbyte));

    /* synchronize frame */
    if (nbyte==0)
    {
        if (data!=0xD3) return 0;
        rtcmbytes[nbyte++]=data;
        byte = byte<<8;
        bitsbyte -= 8;
        return 0;
    }
    uint8_t temp = bitsbyte/8;
    uint8_t temp_end = bitsbyte%8;
    if(end_flag && temp_end)
    {
        temp += 1;
        bitsbyte += temp_end;
    }
    for(int i = 0; i<temp; i++)
    {
        rtcmbytes[nbyte++] = (uint8_t)((((byte))&((uint64_t)0xFF00000000000000))>>56);
        byte = byte<<8;
        bitsbyte -= 8;
    }

    if (nbyte==3)
    {
        len=getbitu(rtcmbytes,14,10)+3; /* length without parity */
    }
    if (nbyte<3||nbyte<len) return 0;

    /* check parity */
    bitsbyte += 24;
    byte = byte|(((uint64_t)(rtk_crc24q(rtcmbytes,len)))<<(64-bitsbyte));

    temp = bitsbyte/8;
    for(int i = 0; i<temp; i++)
    {
        rtcmbytes[nbyte++] = (uint8_t)((((byte))&((uint64_t)0xFF00000000000000))>>56);
        byte = byte<<8;
    }
    temp_nbyte = len+3;

    nbyte = 0;
    byte = 0;
    bitsbyte = 0;
    len = 0;

    return temp_nbyte;
}

示例

 

 

        SetRTCM3Data(0xD3, 8, rtcmbytes, 0);
        SetRTCM3Data(0x00, 6, rtcmbytes, 0);
        SetRTCM3Data(0x2C, 10, rtcmbytes, 0);
        SetRTCM3Data(0x3E7, 12, rtcmbytes, 0);
        SetRTCM3Data(0x28, 8, rtcmbytes, 0);
        SetRTCM3Data(123456, 30, rtcmbytes, 0);
        SetRTCM3Data(2, 4, rtcmbytes, 0);
        SetRTCM3Data(0x12, 32, rtcmbytes, 0);
        SetRTCM3Data(0x12, 32, rtcmbytes, 0);
        SetRTCM3Data(0x12, 32, rtcmbytes, 0);
        SetRTCM3Data(0x12, 24, rtcmbytes, 0);
        SetRTCM3Data(0x12, 24, rtcmbytes, 0);
        SetRTCM3Data(0x12, 24, rtcmbytes, 0);
        SetRTCM3Data(0x12, 18, rtcmbytes, 0);
        SetRTCM3Data(0x12, 18, rtcmbytes, 0);
        SetRTCM3Data(0x12, 18, rtcmbytes, 0);
        SetRTCM3Data(0x00, 8, rtcmbytes, 0);
        SetRTCM3Data(36, 32, rtcmbytes, 0);
        rtcm_size = SetRTCM3Data(24, 32, rtcmbytes, 1);
        //printf("rtcm_size: %d\r\n", rtcm_size);
        MyPrintf((char*)rtcmbytes, rtcm_size);
        rtcm_size = 0;

 

结果

 

D3 00 2C 3E 72 80 00 78 90 08 00 00 00 48 00 00 00 48 00 00 00 48 00 00 48 00 00 48 00 00 48 00 12 00 04 80 01 20 00 00 00 02 40 00 00 01 80 16 A8 BC 

 

标签:编码,00,RTCM,SetRTCM3Data,0x12,rtcmbytes,byte,数据包,size
From: https://www.cnblogs.com/boring-luobo/p/18126192

相关文章

  • 克魔助手工具详解、数据包抓取分析、使用教程
     目录摘要引言克魔助手界面克魔助手查看数据捕获列表数据包解析窗口数据包数据窗口克魔助手过滤器表达式的规则抓包过滤器实例总结参考资料摘要本文介绍了克魔助手工具的界面和功能,包括数据包的捕获和分析,以及抓包过滤器的使用方法。同时提供了一些代码案例演示......
  • 克魔助手工具详解、数据包抓取分析、使用教程
     目录摘要引言克魔助手界面克魔助手查看数据捕获列表数据包解析窗口数据包数据窗口克魔助手过滤器表达式的规则抓包过滤器实例总结参考资料摘要本文介绍了克魔助手工具的界面和功能,包括数据包的捕获和分析,以及抓包过滤器的使用方法。同时提供了一些代码案例演示......
  • 汇编语言简易教程(3):编码表示
    汇编语言简易教程(3):编码表示'表示'指的是计算机如何在内存中表示/存储.计算机使用二进制(1/0)进行存储,但是由于空间的限制,任何表示方式只能表达一定范围,一定精度的数据.本章简要总结了整数、浮点和ASCII表示方案。假设读者已经普遍熟悉二进制、十进制和十六进制......
  • 前端补充:url编码
    一、URL解码/编码详解当URL路径或者查询参数中,带有中文或者特殊字符的时候,就需要对URL进行编码(采用十六进制编码格式)。URL编码的原则是使用安全字符去表示那些不安全的字符。安全字符,指的是没有特殊用途或者特殊意义的字符。二、URL基本组成URL是由一些简单的组件......
  • eas_批量更新组织长编码,长名称
    protectedvoidrebuildOrgStructureDisplayName(Contextctx)throwsBOSException{/*555*/Connectionconn=null;/*556*/Statementstmt=null;/*557*/PreparedStatementpstmt=null;/*558*/ResultSetrs=null;/**/......
  • URL详解与URL编码
    URL详解与URL编码 作为前端,每日与URL打交道是必不可少的。但是也许每天只是单纯的用,对其只是一知半解,随着工作的展开,我发现在日常抓包调试,接口调用,浏览器兼容等许多方面,不深入去理解URL与URL编码则会踩到很多坑。故写下此篇文章,详解一下URL。URL与URI很多人会混淆这......
  • 批量转换pcd数据的编码形式:Binary转ASCII
    本文为CSDN晚意丶3D原创,转载请表明原文出处———————————————————————————————————————批量转换pcd数据的编码形式:Binary转ASCII代码结果相关内容pcd点云格式的编码有两种,分别是Binary和ASCIIBinary是二进制格式,用文......
  • GC机制+字符编码+文件操作
    深浅拷贝深浅拷贝问题1.1定义理解给一个列表,想基于这个列表进行更改生成一个新的列表。方式一:将原来列表复制一份一摸一样的只对新列表生效,对原来的不生效num_list=[1,2,3]num_list_new=[1,2,3]num_list_new.append(4)print(num_list)#[1,2,3]print(num_list_n......
  • 基于FPGA的数据采集、编码、通讯和存储系统设计(即FPGA+RTL8211千兆以太网+SD卡存储+RT
    介绍一个小项目,加强对FPGA相关接口的整体把握。硬件及软件代码梳理:硬件系统的主要功能框图,其中FPGA作为处理单元,实现了包括电流和电压的采集、千兆以太网通讯、SD卡本地数据存储和串口通讯等。已经过板级测试,测试包含:千兆网通讯收发测试、AD采集的数据验证、SD卡存储验证......
  • 字符编码
    数据存放位置内存如何将数据保存到硬盘字符编码计算机只能识别二进制将我们的文字转换为计算机可以识别的文字编码发展史一段:一家独大ASCII码表大写英文A到Z:65-90小写英文a到z:97-122数字0-9:48-57二段:诸侯割据基于ASCII码表扩展成各自国家的编码表GBK:中......