Qt实用技巧:北斗GPS通讯代码模式下混合中英文数字发信内容的字符编码转换方法

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131434492

红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…

Qt开发专栏:实用技巧


需求

  开发北斗GPS定位通讯,在”通信申请($TXSQ)“协议上重新定义了一套自定义协议,通讯内容中涉及到中文传递,需要按照北斗工具进行编码切换。
  在这里插入图片描述

原理

  北斗gps通讯协议实际上是三种模式:一种汉字,一种代码,代码中又分为纯代码和混合,代码模式实际上是对可视化的部分进行GBK编码转化。
  自定义协议设计时需区分了指令混合传递(指令字节是不可视化,解析为对话内容则需要GBK转花奴)。


转化方法

  就是对协议中定义的可视化内容直接做无视本地编码化的GBK编码转换,一刀切的处理方式。

#include <QApplication>
#include <QTextCodec>

#include <QDebug>
#include <QDateTime>
//#define LOG qDebug()<<__FILE__<<__LINE__
//#define LOG qDebug()<<__FILE__<<__LINE__<<__FUNCTION__
//#define LOG qDebug()<<__FILE__<<__LINE__<<QThread()::currentThread()
//#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd")
#define LOG qDebug()<<__FILE__<<__LINE__<<QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss:zzz")


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


    QString str = QString("你好1234");
#if 1
    // 1.无视本地编码
    // 2.强制本地转换为GBK编码
    LOG << "内容:" << str;
    QTextCodec *pTextCodec = QTextCodec::codecForName("GBK");
    QByteArray data = pTextCodec->fromUnicode(str);
    LOG << "转换为GBK编码:" << QString(data.toHex(' '));
#endif

#if 1
    // 1.GBK编码转换为本地编码
    // 2.无视本地编码
//    QTextCodec *pTextCodec = QTextCodec::codecForName("GBK");
    pTextCodec = QTextCodec::codecForName("GBK");
    str = pTextCodec->toUnicode(data);
    LOG << "转换为本地文本:" << str;

#endif

    return a.exec();
}


  在这里插入图片描述


若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131434492

猜你喜欢

转载自blog.csdn.net/qq21497936/article/details/131434492