解析十六进制雷达数据格式:解析雷达数据长度。

以Cat62格式雷达数据为例,十六进制雷达数据部分代码:

3e0120bf7da4ffee0085

雷达数据长度使用4个字符(2个字节)标识,在这里是“0120”,转换为十进制数为288。

雷达数据长度父类:

base_length_processor.h

//
// Created by qiaowei on 2024-02-02.
//

#ifndef RADARDATACONTROLLER_BASE_LENGTH_PROCESSOR_H
#define RADARDATACONTROLLER_BASE_LENGTH_PROCESSOR_H


#include <QString>


namespace processor {

    class BaseLengthProcessor {

    public:
        virtual int processor(const QString& track_data,
                              int begin_position_index,
                              int& readed_data_end_position) = 0;
    };

} // processor

#endif //RADARDATACONTROLLER_BASE_LENGTH_PROCESSOR_H

cat_62_length_processor.h

//
// Created by qiaowei on 2024-02-02.
//

#ifndef RADARDATACONTROLLER_CAT_62_LENGTH_PROCESSOR_H
#define RADARDATACONTROLLER_CAT_62_LENGTH_PROCESSOR_H


#include <QObject>
#include <QString>

#include "../baseprocess/base_length_processor.h"


namespace processor {

    class Cat62LengthProcessor : public QObject, public BaseLengthProcessor {

    public:
        explicit Cat62LengthProcessor(QObject* parent = nullptr);

        virtual ~Cat62LengthProcessor() override;

        /**
         * @author  qiao wei
         * @brief   获取Cat62格式雷达数据长度。返回值单位为字节(注意字符串中字节与字符索引区别)。
         * @param   track_data 雷达数据。
         * @param   begin_position 雷达数据中保存雷达长度的字符串首字符索引。
         * @param   readed_data_end_position 雷达数据中保存雷达长度的字符串末字符索引。
         * @return  返回该雷达数据的字节数量。雷达数据不完整时返回-1。
         * @history
         */
        virtual int processor(const QString& track_data,
                              int begin_position,
                              int& readed_data_end_position) override;
    };

} // processor

#endif //RADARDATACONTROLLER_CAT_62_LENGTH_PROCESSOR_H

cat_62_length_processor.cpp

//
// Created by qiaowei on 2024-02-02.
//


#include "cat_62_length_processor.h"


namespace processor {

    Cat62LengthProcessor::Cat62LengthProcessor(QObject* parent) : QObject(parent) {}

    Cat62LengthProcessor::~Cat62LengthProcessor() {}

    int Cat62LengthProcessor::processor(const QString& track_data,
                                        int begin_position,
                                        int& readed_data_end_position) {
        // 初始化索引。长度项初始位索引赋值给长度项末尾索引。
        readed_data_end_position = begin_position;

        // 读取雷达数据的字节长度。字节长度为字符长度的一半。保存雷达数据长度的字符有4个,2个字节。
        const int track_data_length{track_data.mid(begin_position, 4).toInt(nullptr, 16)};

        // 雷达数据中数据长度项最后一位字符的索引。
        readed_data_end_position = begin_position + 4 - 1;

        if (track_data_length == track_data.length() / 2) {
            return track_data_length;
        } else {
            // 雷达数据不完整返回-1。
            return -1;
        }
    }

} // processor

main.cpp

#include <string>

#include <QApplication>
#include <QVector>
#include <QtDebug>
#include <QString>

#include "./form/main_window.h"
#include "./cat62process/cat62_fspec_processor.h"
#include "./cat62process/cat_62_length_processor.h"
#include "./cat62process/cat_62_header_processor.h"


using std::string;

using form::MainWindow;
using processor::Cat62FspecProcessor;
using processor::Cat62HeaderProcessor;
using processor::Cat62LengthProcessor;


int main(int argc,
         char *argv[]) {
    QApplication a(argc, argv);

//    MainWindow* main_window{new MainWindow{nullptr}};
//    main_window->show();

    QString content = "3e0120bf7da4ffee0085988";

    int begin_position{0};
    int end_position = begin_position;
    Cat62HeaderProcessor* header_processor{new Cat62HeaderProcessor{}};
    qDebug()<< header_processor->processor(content, begin_position, end_position);

    begin_position = end_position + 1;
    Cat62LengthProcessor* lenght_processor{new Cat62LengthProcessor{}};
    qDebug()<< lenght_processor->processor(content, begin_position, end_position);

    begin_position = end_position + 1;
    Cat62FspecProcessor* fspec_processor{new Cat62FspecProcessor{}};
    QVector<int>* vector = fspec_processor->processor(content, begin_position, end_position);

    for (int index = 0; index < vector->capacity(); ++index) {
        qDebug()<< index << ": " << vector->at(index) << ", ";
    }

    int i{20};

    return QApplication::exec();
}

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/382321.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能如何彻底改变身份欺诈

据 AuthenticID 称&#xff0c;近一半的企业报告合成身份欺诈有所增加&#xff0c;而生物识别欺骗和伪造 ID 欺诈尝试也有所增加。 在当今的数字化存在中&#xff0c;消费者和企业都面临着新的挑战&#xff0c;从考虑数字身份的影响到应对生成人工智能等新工具的使用和流行。与…

最高的牛(C++)

有 N头牛站成一行&#xff0c;被编队为 1、2、3…N每头牛的身高都为整数。 当且仅当两头牛中间的牛身高都比它们矮时&#xff0c;两头牛方可看到对方。 现在&#xff0c;我们只知道其中最高的牛是第 P 头&#xff0c;它的身高是 H &#xff0c;剩余牛的身高未知。 但是&#xf…

css2复合选择器

一.后代&#xff08;包含&#xff09;选择器&#xff08;一样的标签可以用class命名以分别&#xff09; 空格表示 全部后代 应用 二.子类选择器 >表示 只要子不要孙 应用 三.并集选择器 &#xff0c;表示 代表和 一般竖着写 应用 四.伪类选择器&#xff08;包括伪链接…

VR和AR傻傻分不清,一句话给你讲明白。

不说废话&#xff0c;直接说结论&#xff0c;虚拟现实&#xff08;Virtual Reality&#xff0c;VR&#xff09;和增强现实&#xff08;Augmented Reality&#xff0c;AR&#xff09;。如果现实是A&#xff0c;虚拟是B&#xff0c;那么VRB&#xff0c;ARAB&#xff0c;就这简单&…

基于javaEE的ssm仓库管理系统

仓库管理系统的重中之重是进销存分析这一板块&#xff0c;在这一板块中&#xff0c;顾名思义能够查询到近期的进货记录&#xff0c;包括每日的进货单据&#xff0c;单品推移(即某一商品的库存变化)&#xff0c;方便我们核对库存差异。同时也需要查询到每日的销售数据&#xff0…

hexo部署到gitee(码云)

引言 Hexo 是一个基于Node.js的静态博客框架&#xff0c;而 Gitee&#xff08;也被称为码云&#xff09;是一个国内的代码托管平台&#xff0c;支持 Git 版本控制系统&#xff0c;与 GitHub 类似。将 Hexo 部署到 Gitee Pages 可以让你的博客受益于 Gitee 的国内服务器&#xf…

ClickHouse--02--安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 安装官网 &#xff1b;[https://clickhouse.com/docs/zh/getting-started/install](https://clickhouse.com/docs/zh/getting-started/install)![在这里插入图片描述…

动态内存分配函数 | free为什么只传入一个指针就能正确释放

文章目录 1.Linux内存分布图2.C标准库中动态内存分配函数3.动态内存分配函数的常见错误 1.Linux内存分布图 在程序设计当中&#xff0c;可以定义全局变量也可以定以局部变量&#xff0c;分别也是在全局区、栈区开辟&#xff0c;那么这些区域都不有用我们动手管理&#xff0c;但…

【第六天】c++虚函数多态

一、多态的概述 多态按字面的意思就是多种形态。当类之间存在层次结构&#xff0c;并且类之间是通过继承关联&#xff08;父类与子类&#xff09;时&#xff0c;就会用到多态。 C 多态意味着调用成员函数时&#xff0c;会根据调用函数的对象的类型来执行不同的函数。 静态多态&…

Java图形化界面编程——菜单组件 笔记

2.7 菜单组件 ​ 前面讲解了如果构建GUI界面&#xff0c;其实就是把一些GUI的组件&#xff0c;按照一定的布局放入到容器中展示就可以了。在实际开发中&#xff0c;除了主界面&#xff0c;还有一类比较重要的内容就是菜单相关组件&#xff0c;可以通过菜单相关组件很方便的使用…

【Spring MVC篇】参数的传递及json数据传参

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Spring MVC】 本专栏旨在分享学习Spring MVC的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一、普通参数的传…

什么是智慧隧道,如何建设智慧隧道

一、隧道管理的难点痛点 近年来隧道建设规模不断扩大&#xff0c;作为隧道通车里程最多、规模最大的国家&#xff0c;截至2022年底&#xff0c;我国公路隧道共有24850处、2678.43万延米&#xff0c;其中特长隧道1752处、795.11万延米&#xff0c;长隧道6715处、1172.82万延米。…

【数学建模】【2024年】【第40届】【MCM/ICM】【C题 网球运动中的“动量”】【解题思路】

一、题目 &#xff08;一&#xff09; 赛题原文 2024 MCM Problem C: Momentum in Tennis In the 2023 Wimbledon Gentlemen’s final, 20-year-old Spanish rising star Carlos Alcaraz defeated 36-year-old Novak Djokovic. The loss was Djokovic’s first at Wimbledon…

Android:Ionic框架使用实例

Ionic学习 ionic 是一个强大的 HTML5 应用程序开发框架(HTML5 Hybrid Mobile App Framework )。通过使用H5,JS,CSS构建接近原生体验的移动应用程序。 ionic放弃对IOS6和Android4.1以下的版本的支持,提高应用程序的运行效率。 Ionic官网地址: Ionic Framework - The Cross-Pla…

Vagrant 虚拟机工具基本操作指南

Vagrant 虚拟机工具基本操作指南 ​#虚拟机 #​ ​#vargant#​ ​#ubuntu#​ ‍ 虚拟机virtualbox ,VMWare及WSL等大家都很了解了&#xff0c;那Vagrant是什么东西&#xff1f; 它是一组命令行工具&#xff0c;可以象Docker管理容器一样管理虚拟机&#xff0c;这样快速创…

使用client-only 解决组件不兼容SSR问题

目录 前言 一、解决方案 1.基于Nuxt 框架的SSR应用 2.基于vue2框架的应用 3.基于vue3框架的应用 二、总结 往期回顾 前言 最近在我的单页面SSR应用上开发JSON编辑器功能&#xff0c;在引入组件后直接客户端跳转OK&#xff0c;但是在直接加载服务端渲染的时候一直报这…

基于springboot超市进销存系统源码和论文

随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;超市进销存系统也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对时代的变化&#xff0c;而超…

IDEA中Git的使用小技巧-Toolbar(工具栏)的设置

目录 1 前言 2 步骤 2.1 打开设置 2.2 找到Menus and Toolbars 2.3 Menus and Toolbars界面的介绍 2.4 选择工具 2.5 查看 1 前言 工具栏的合理运用&#xff0c;能够极大程度上为我们省时省力 &#xff0c;接下来我将以Git工具的添加&#xff0c;介绍如何定制我们IDEA…

应用层 HTTP协议(1)

回顾 前面我们说到了数据链路层,网络层IP协议,传输层的TCP/UDP协议一些知识点,现在让我们谈谈 应用层的HTTP协议的知识点. 这篇我们先从大局入手,仍然是对总体报文进行全局分析,再对细节报文进行拆解分析 版本 首先我们谈谈HTTP协议的版本 HTTP 0.9 (1991) HTTP 1.0 (1992 - 1…

GEE数据集——美国地质调查局历史地形图(更新)

美国地质调查局历史地形图 美国地质调查局地形图的历史可追溯到 19 世纪末&#xff0c;当时美国地质调查局开始着手绘制整个美国的详细地图。1:24,000 比例尺&#xff0c;也称为 7.5 分钟四边形地图&#xff0c;成为最广泛使用的比例尺之一。每张地图覆盖 7.5 分经纬度的区域&a…