串口、TCP、UDP传输中文字符时,先将字符串转内码。客户端接收到数据后,将内码转为字符串就OK了

QByteArray CommonFunction::strToInterCode(constQString &str)//字符串转内码

{
    QString strName = str.toLocal8Bit();
    QByteArray code;
    code.append (strName);

    while(code.count()<8)
    {
        code.append (QByteArray::fromHex ("20"));
    }
    qDebug ()<<"string to intercode"<<QObject::tr("%1").arg (code.toHex ().data ());
    return code;
}

//内码转字符串,要求为双字节数
QString CommonFunction::interCodeToStr(const QByteArray &data)
{
    QString str;
    QByteArray temp;
    for(int i= 0;i<data.length();i+=2)
    {
        if(!(data[i] == 0x20 && data[i+1] == 0x20))
        {
            temp.append (data[i]);
            temp.append (data[i+1]);
        }
    }
    str = QString::fromLocal8Bit(temp);
    qDebug ()<< "intercode To string :"<<str;
    return str;
}

// 字符串转Unicode码
QByteArray CommonFunction::strToUniCode(const QString &str)
{
    // 这里传来的字符串一定要加tr,main函数里可以加 QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

    QString stt = QObject::tr("%1").arg (str);

    QByteArray data;
    const QChar *q;
    QChar qtmp;
    int num;
    q=stt.unicode();
    int len=stt.count();
    for(int i=0;i<len;i++)
    {
        qtmp =(QChar)*q++;
        num= qtmp.unicode();

        quint8 hi = (quint8)(num >> 8);
        quint8 lo = (quint8)(num);
        data.append (hi);
        data.append (lo);
    }

    while(data.count () <8)
    {
        data.append (QByteArray::fromHex ("20"));
    }
    qDebug ()<<"string to unicode :"<<QObject::tr("%1").arg (data.toHex ().data ());
    return data;
}


//Unicode码转字符串
QString CommonFunction::uniCodeToStr(const QByteArray &data)
{
    QByteArray data_1;
    for(int i= 0;i<data.length ();i+=2)
    {
        if(!(data[i] == 0x20 && data[i+1] == 0x20))
        {
            data_1.append (data[i]);
            data_1.append (data[i+1]);
        }
    }
    QString str = data_1.toHex ().data ();
    int temp[400];

    QChar qchar[100];

    QString strOut;
    bool ok;
    int count=str.count();
    int len=count/4;
    for(int i=0;i<count;i+=4)
    {
        temp[i]=str.mid(i,4).toInt(&ok,16);//每四位转化为16进制整型
        qchar[i/4]=temp[i];
        QString str0(qchar, len);
        strOut=str0;
    }
    qDebug ()<<"unicode to string:"<<strOut;
    return strOut;
}

http://blog.csdn.net/liuguangzhou123/article/details/7478088

QT字符编码转换,可用于中文内码传输的更多相关文章

  1. Qt代码区字符编码转换

    在做通讯练习的时候,发现发送给小助手字符乱码,图片如下 本人Qt Creator是UTF-8,需要改成gbk,代码如下 #include<QTextCodec> // 提供字符编码转换 Q ...

  2. iconv字符编码转换

    转自 http://blog.csdn.net/langresser_king/article/details/7459367 iconv(http://www.gnu.org/software/li ...

  3. day4学python 字符编码转换+元组概念

    字符编码转换+元组概念 字符编码转换 #coding:gbk //此处必声明 文件编码(看右下角编码格式) #用来得到python默认编码 import sys print(sys.getdefaul ...

  4. centos中文乱码修改字符编码使用centos支持中文

    如何你的centos显示中文乱码,只要修改字符编码使centos支持中文就可以了,没有这个文件可以创建它,下面是修改步骤 一.中文支持 安装中文语言包: 复制代码 代码如下: yum groupins ...

  5. Char Tools,方便的字符编码转换小工具

    工作关系,常有字符编码转换方面的需要,写了这个小工具 Char Tools是一款方便的字符编码转换小工具,基于.Net Framework 2.0 Winform开发 主要功能 URL编码:URLEn ...

  6. php 字符编码转换函数 iconv mb_convert_encoding比较

    在使用PHP处理字符串时,我们经常会碰到字符编码转换的问题,你碰到过iconv转换失败吗? 发现问题时,网上搜了搜,才发现iconv原来有bug ,碰到一些生僻字就会无法转换,当然了配置第二个参数时, ...

  7. 编码问题 php字符编码转换类

    各种平台和软件打开显示的编码问题,需要使用不同的编码,根据我们不同的需求. php 字符编码转换类,支持ANSI.Unicode.Unicode big endian.UTF-8.UTF-8+Bom ...

  8. Python—字符编码转换、函数基本操作

    字符编码转换 函数 #声明文件编码,格式如下: #-*- coding:utf-8 -*- 注意此处只是声明了文件编码格式,python的默认编码还是unicode 字符编码转换: import sy ...

  9. 关于web.xml中配置Spring字符编码过滤器以解决中文乱码的问题

    当出现中文乱码问题,Spring中可以利用CharacterEncodingFilter过滤器解决,如下代码所示: <!-- Spring字符编码过滤器:解决中文乱码问题 --> < ...

随机推荐

  1. Ruby开发环境

    Windows上Ruby开发环境的配置   最近公司项目上有需要,需要开发一个puppet的自动化工具,这个工具需要操作存储设备上的各种资源,而鉴于puppet不是善于完成这个任务的首选语言,于是我们 ...

  2. 微信Android终端SDK新手使用指南

    1.申请你的AppID 请到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将获得AppID,可立即用于开发.但应用登记完成后还需要提交审核,只有审核通过的应用才能正式发布使用. 2.下 ...

  3. Linux下安装mysql(1)(CentOS)

    标题是(1)也就是说这次是基础安装,这种方式安装,没有组的创建,权限管理,配置文件更改等,仅仅是最基本的安装,适合第一次在linux上安装mysql的新手 1.准备好安装包(Linux-Generic ...

  4. Js之全局函数

    全局函数 encodeURI()decodeURI()encodeURIComponent()decodeURIComponent()escape()unescape()eval() String() ...

  5. Win7 64有点找不到MSVCP71.DLL和MSVCR71.dll

     现象: win7启动好多程序都报找不到MSVCP71.DLL,网页上不去,可是非常奇怪的是好像在线给系统打补丁没有受到不论什么影响,能正常打补丁. 解决: 从本机搜索了一下msvcp71.dll ...

  6. 网络故障模拟,cpu高压以及docker中的实现

    利用tc进行丢包 通过网络丢包来模拟网络故障,是测试中一个重要的测试项目.这对服务来说可以测试其在网络故障时的异常处理的能力,对于服务的可靠性是一个相当严苛的测试. 网卡名为$netcard,丢包率为 ...

  7. SpringBoot、Groovy

    Java——搭建自己的RESTful API服务器(SpringBoot.Groovy)   这又是一篇JavaWeb相关的博客,内容涉及: SpringBoot:微框架,提供快速构建服务的功能 Sp ...

  8. 参数方法(parameter)与非参数方法(nonparameter)

    参数方法表示参数固定,不随数据点的变化而变化: 非参数方法并不意味着没有参数,而是说,参数的数目随数据点而变化, 1. 参数方法举例 logistic regression:p(y=1|x,α)=11 ...

  9. ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 视图导入 上一章节我们介绍了视图起始页,学习 ...

  10. 短暂聊天VS温馨提示

    介绍 作为一个合作格该程序猿,使用的开发工具的熟练使用是我们必须掌握的. 而作为一名优秀的程序猿.我们不仅要能熟练的使用.并且还要去高效的使用. 而作为.Net平台专门定制的开发工具VS那当然是我们必 ...