温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Qt函数名怎么定义

发布时间:2021-12-15 10:25:26 阅读:141 作者:iii 栏目:互联网科技
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

本篇内容主要讲解“Qt函数名怎么定义”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Qt函数名怎么定义”吧!

函数名

    //异或加密算法
    static QString getXorEncryptDecrypt(const QString &str, char key);
    //异或校验
    static uchar getOrCode(const QByteArray &data);
    //计算校验码
    static uchar getCheckCode(const QByteArray &data);

    //CRC校验
    static quint16 getRevCrc_16(quint8 *data, int len, quint16 initconst quint16 *table);
    static quint16 getCrc_16(quint8 *data, int len, quint16 initconst quint16 *table);
    static quint16 getModbus16(quint8 *data, int len);
    static QByteArray getCRCCode(const QByteArray &data);

函数体

QString QUIHelper::getXorEncryptDecrypt(const QString &str, char key)
{
    QByteArray data = str.toLatin1();
    int size = data.size();
    for (int i = 0; i < size; i++) {
        data[i] = data[i] ^ key;
    }

    return QLatin1String(data);
}

uchar QUIHelper::getOrCode(const QByteArray &data)
{
    int len = data.length();
    uchar result = 0;

    for (int i = 0; i < len; i++) {
        result ^= data.at(i);
    }

    return result;
}

uchar QUIHelper::getCheckCode(const QByteArray &data)
{
    int len = data.length();
    uchar temp = 0;

    for (uchar i = 0; i < len; i++) {
        temp += data.at(i);
    }

    return temp % 256;
}

//函数功能:计算CRC16
//参数1:*data 16位CRC校验数据,
//参数2:len   数据流长度
//参数3:init  初始化值
//参数4:table 16位CRC查找表

//逆序CRC计算
quint16 QUIHelper::getRevCrc_16(quint8 *data, int len, quint16 initconst quint16 *table)
{
    quint16 cRc_16 = init;
    quint8 temp;

    while (len-- > 0) {
        temp = cRc_16 >> 8;
        cRc_16 = (cRc_16 << 8) ^ table[(temp ^ *data++) & 0xff];
    }

    return cRc_16;
}

//正序CRC计算
quint16 QUIHelper::getCrc_16(quint8 *data, int len, quint16 initconst quint16 *table)
{
    quint16 cRc_16 = init;
    quint8 temp;

    while (len-- > 0) {
        temp = cRc_16 & 0xff;
        cRc_16 = (cRc_16 >> 8) ^ table[(temp ^ *data++) & 0xff];
    }

    return cRc_16;
}

//Modbus CRC16校验
quint16 QUIHelper::getModbus16(quint8 *data, int len)
{
    //MODBUS CRC-16表 8005 逆序
    const quint16 table_16[256] = {
        0x00000xC0C10xC1810x01400xC3010x03C00x02800xC241,
        0xC6010x06C00x07800xC7410x05000xC5C10xC4810x0440,
        0xCC010x0CC00x0D800xCD410x0F000xCFC10xCE810x0E40,
        0x0A000xCAC10xCB810x0B400xC9010x09C00x08800xC841,
        0xD8010x18C00x19800xD9410x1B000xDBC10xDA810x1A40,
        0x1E000xDEC10xDF810x1F400xDD010x1DC00x1C800xDC41,
        0x14000xD4C10xD5810x15400xD7010x17C00x16800xD641,
        0xD2010x12C00x13800xD3410x11000xD1C10xD0810x1040,
        0xF0010x30C00x31800xF1410x33000xF3C10xF2810x3240,
        0x36000xF6C10xF7810x37400xF5010x35C00x34800xF441,
        0x3C000xFCC10xFD810x3D400xFF010x3FC00x3E800xFE41,
        0xFA010x3AC00x3B800xFB410x39000xF9C10xF8810x3840,
        0x28000xE8C10xE9810x29400xEB010x2BC00x2A800xEA41,
        0xEE010x2EC00x2F800xEF410x2D000xEDC10xEC810x2C40,
        0xE4010x24C00x25800xE5410x27000xE7C10xE6810x2640,
        0x22000xE2C10xE3810x23400xE1010x21C00x20800xE041,
        0xA0010x60C00x61800xA1410x63000xA3C10xA2810x6240,
        0x66000xA6C10xA7810x67400xA5010x65C00x64800xA441,
        0x6C000xACC10xAD810x6D400xAF010x6FC00x6E800xAE41,
        0xAA010x6AC00x6B800xAB410x69000xA9C10xA8810x6840,
        0x78000xB8C10xB9810x79400xBB010x7BC00x7A800xBA41,
        0xBE010x7EC00x7F800xBF410x7D000xBDC10xBC810x7C40,
        0xB4010x74C00x75800xB5410x77000xB7C10xB6810x7640,
        0x72000xB2C10xB3810x73400xB1010x71C00x70800xB041,
        0x50000x90C10x91810x51400x93010x53C00x52800x9241,
        0x96010x56C00x57800x97410x55000x95C10x94810x5440,
        0x9C010x5CC00x5D800x9D410x5F000x9FC10x9E810x5E40,
        0x5A000x9AC10x9B810x5B400x99010x59C00x58800x9841,
        0x88010x48C00x49800x89410x4B000x8BC10x8A810x4A40,
        0x4E000x8EC10x8F810x4F400x8D010x4DC00x4C800x8C41,
        0x44000x84C10x85810x45400x87010x47C00x46800x8641,
        0x82010x42C00x43800x83410x41000x81C10x80810x4040
    };

    return getCrc_16(data, len, 0xFFFF, table_16);
}

//CRC16校验
QByteArray QUIHelper::getCRCCode(const QByteArray &data)
{
    quint16 result = getModbus16((quint8 *)data.data(), data.length());
    return QUIHelper::ushortToByteRec(result);
}

到此,相信大家对“Qt函数名怎么定义”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/feiyangqingyun/blog/3275214

qt
AI

开发者交流群×