• Qt通用方法及类库9


    函数名

        //字节数组转Ascii字符串
        static QString byteArrayToAsciiStr(const QByteArray &data);
        //16进制字符串转字节数组
        static QByteArray hexStrToByteArray(const QString &str);
        static char convertHexChar(char ch);
    
        //Ascii字符串转字节数组
        static QByteArray asciiStrToByteArray(const QString &str);
        //字节数组转16进制字符串
        static QString byteArrayToHexStr(const QByteArray &data);
    

    函数体

    QString QUIHelper::byteArrayToAsciiStr(const QByteArray &data)
    {
        QString temp;
        int len = data.size();
    
        for (int i = 0; i < len; i++) {
            //0x20为空格,空格以下都是不可见字符
            char b = data.at(i);
    
            if (0x00 == b) {
                temp += QString("\NUL");
            } else if (0x01 == b) {
                temp += QString("\SOH");
            } else if (0x02 == b) {
                temp += QString("\STX");
            } else if (0x03 == b) {
                temp += QString("\ETX");
            } else if (0x04 == b) {
                temp += QString("\EOT");
            } else if (0x05 == b) {
                temp += QString("\ENQ");
            } else if (0x06 == b) {
                temp += QString("\ACK");
            } else if (0x07 == b) {
                temp += QString("\BEL");
            } else if (0x08 == b) {
                temp += QString("\BS");
            } else if (0x09 == b) {
                temp += QString("\HT");
            } else if (0x0A == b) {
                temp += QString("\LF");
            } else if (0x0B == b) {
                temp += QString("\VT");
            } else if (0x0C == b) {
                temp += QString("\FF");
            } else if (0x0D == b) {
                temp += QString("\CR");
            } else if (0x0E == b) {
                temp += QString("\SO");
            } else if (0x0F == b) {
                temp += QString("\SI");
            } else if (0x10 == b) {
                temp += QString("\DLE");
            } else if (0x11 == b) {
                temp += QString("\DC1");
            } else if (0x12 == b) {
                temp += QString("\DC2");
            } else if (0x13 == b) {
                temp += QString("\DC3");
            } else if (0x14 == b) {
                temp += QString("\DC4");
            } else if (0x15 == b) {
                temp += QString("\NAK");
            } else if (0x16 == b) {
                temp += QString("\SYN");
            } else if (0x17 == b) {
                temp += QString("\ETB");
            } else if (0x18 == b) {
                temp += QString("\CAN");
            } else if (0x19 == b) {
                temp += QString("\EM");
            } else if (0x1A == b) {
                temp += QString("\SUB");
            } else if (0x1B == b) {
                temp += QString("\ESC");
            } else if (0x1C == b) {
                temp += QString("\FS");
            } else if (0x1D == b) {
                temp += QString("\GS");
            } else if (0x1E == b) {
                temp += QString("\RS");
            } else if (0x1F == b) {
                temp += QString("\US");
            } else if (0x7F == b) {
                temp += QString("\x7F");
            } else if (0x5C == b) {
                temp += QString("\x5C");
            } else if (0x20 >= b) {
                temp += QString("\x%1").arg(decimalToStrHex((quint8)b));
            } else {
                temp += QString("%1").arg(b);
            }
        }
    
        return temp.trimmed();
    }
    
    QByteArray QUIHelper::hexStrToByteArray(const QString &str)
    {
        QByteArray senddata;
        int hexdata, lowhexdata;
        int hexdatalen = 0;
        int len = str.length();
        senddata.resize(len / 2);
        char lstr, hstr;
    
        for (int i = 0; i < len;) {
            hstr = str.at(i).toLatin1();
            if (hstr == ' ') {
                i++;
                continue;
            }
    
            i++;
            if (i >= len) {
                break;
            }
    
            lstr = str.at(i).toLatin1();
            hexdata = convertHexChar(hstr);
            lowhexdata = convertHexChar(lstr);
    
            if ((hexdata == 16) || (lowhexdata == 16)) {
                break;
            } else {
                hexdata = hexdata * 16 + lowhexdata;
            }
    
            i++;
            senddata[hexdatalen] = (char)hexdata;
            hexdatalen++;
        }
    
        senddata.resize(hexdatalen);
        return senddata;
    }
    
    char QUIHelper::convertHexChar(char ch)
    {
        if ((ch >= '0') && (ch <= '9')) {
            return ch - 0x30;
        } else if ((ch >= 'A') && (ch <= 'F')) {
            return ch - 'A' + 10;
        } else if ((ch >= 'a') && (ch <= 'f')) {
            return ch - 'a' + 10;
        } else {
            return (-1);
        }
    }
    
    QByteArray QUIHelper::asciiStrToByteArray(const QString &str)
    {
        QByteArray buffer;
        int len = str.length();
        QString letter;
        QString hex;
    
        for (int i = 0; i < len; i++) {
            letter = str.at(i);
    
            if (letter == "\") {
                i++;
                letter = str.mid(i, 1);
    
                if (letter == "x") {
                    i++;
                    hex = str.mid(i, 2);
                    buffer.append(strHexToDecimal(hex));
                    i++;
                    continue;
                } else if (letter == "N") {
                    i++;
                    hex = str.mid(i, 1);
    
                    if (hex == "U") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "L") {           //NUL=0x00
                            buffer.append((char)0x00);
                            continue;
                        }
                    } else if (hex == "A") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "K") {           //NAK=0x15
                            buffer.append(0x15);
                            continue;
                        }
                    }
                } else if (letter == "S") {
                    i++;
                    hex = str.mid(i, 1);
    
                    if (hex == "O") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "H") {           //SOH=0x01
                            buffer.append(0x01);
                            continue;
                        } else {                    //SO=0x0E
                            buffer.append(0x0E);
                            i--;
                            continue;
                        }
                    } else if (hex == "T") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "X") {           //STX=0x02
                            buffer.append(0x02);
                            continue;
                        }
                    } else if (hex == "I") {        //SI=0x0F
                        buffer.append(0x0F);
                        continue;
                    } else if (hex == "Y") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "N") {           //SYN=0x16
                            buffer.append(0x16);
                            continue;
                        }
                    } else if (hex == "U") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "B") {           //SUB=0x1A
                            buffer.append(0x1A);
                            continue;
                        }
                    }
                } else if (letter == "E") {
                    i++;
                    hex = str.mid(i, 1);
    
                    if (hex == "T") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "X") {           //ETX=0x03
                            buffer.append(0x03);
                            continue;
                        } else if (hex == "B") {    //ETB=0x17
                            buffer.append(0x17);
                            continue;
                        }
                    } else if (hex == "O") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "T") {           //EOT=0x04
                            buffer.append(0x04);
                            continue;
                        }
                    } else if (hex == "N") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "Q") {           //ENQ=0x05
                            buffer.append(0x05);
                            continue;
                        }
                    } else if (hex == "M") {        //EM=0x19
                        buffer.append(0x19);
                        continue;
                    } else if (hex == "S") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "C") {           //ESC=0x1B
                            buffer.append(0x1B);
                            continue;
                        }
                    }
                } else if (letter == "A") {
                    i++;
                    hex = str.mid(i, 1);
    
                    if (hex == "C") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "K") {           //ACK=0x06
                            buffer.append(0x06);
                            continue;
                        }
                    }
                } else if (letter == "B") {
                    i++;
                    hex = str.mid(i, 1);
    
                    if (hex == "E") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "L") {           //BEL=0x07
                            buffer.append(0x07);
                            continue;
                        }
                    } else if (hex == "S") {        //BS=0x08
                        buffer.append(0x08);
                        continue;
                    }
                } else if (letter == "C") {
                    i++;
                    hex = str.mid(i, 1);
    
                    if (hex == "R") {               //CR=0x0D
                        buffer.append(0x0D);
                        continue;
                    } else if (hex == "A") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "N") {           //CAN=0x18
                            buffer.append(0x18);
                            continue;
                        }
                    }
                } else if (letter == "D") {
                    i++;
                    hex = str.mid(i, 1);
    
                    if (hex == "L") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "E") {           //DLE=0x10
                            buffer.append(0x10);
                            continue;
                        }
                    } else if (hex == "C") {
                        i++;
                        hex = str.mid(i, 1);
    
                        if (hex == "1") {           //DC1=0x11
                            buffer.append(0x11);
                            continue;
                        } else if (hex == "2") {    //DC2=0x12
                            buffer.append(0x12);
                            continue;
                        } else if (hex == "3") {    //DC3=0x13
                            buffer.append(0x13);
                            continue;
                        } else if (hex == "4") {    //DC2=0x14
                            buffer.append(0x14);
                            continue;
                        }
                    }
                } else if (letter == "F") {
                    i++;
                    hex = str.mid(i, 1);
    
                    if (hex == "F") {               //FF=0x0C
                        buffer.append(0x0C);
                        continue;
                    } else if (hex == "S") {        //FS=0x1C
                        buffer.append(0x1C);
                        continue;
                    }
                } else if (letter == "H") {
                    i++;
                    hex = str.mid(i, 1);
    
                    if (hex == "T") {               //HT=0x09
                        buffer.append(0x09);
                        continue;
                    }
                } else if (letter == "L") {
                    i++;
                    hex = str.mid(i, 1);
    
                    if (hex == "F") {               //LF=0x0A
                        buffer.append(0x0A);
                        continue;
                    }
                } else if (letter == "G") {
                    i++;
                    hex = str.mid(i, 1);
    
                    if (hex == "S") {               //GS=0x1D
                        buffer.append(0x1D);
                        continue;
                    }
                } else if (letter == "R") {
                    i++;
                    hex = str.mid(i, 1);
    
                    if (hex == "S") {               //RS=0x1E
                        buffer.append(0x1E);
                        continue;
                    }
                } else if (letter == "U") {
                    i++;
                    hex = str.mid(i, 1);
    
                    if (hex == "S") {               //US=0x1F
                        buffer.append(0x1F);
                        continue;
                    }
                } else if (letter == "V") {
                    i++;
                    hex = str.mid(i, 1);
    
                    if (hex == "T") {               //VT=0x0B
                        buffer.append(0x0B);
                        continue;
                    }
                } else if (letter == "\") {
                    //如果连着的是多个\则对应添加对应的16进制0x5C
                    buffer.append(0x5C);
                    continue;
                } else {
                    //将对应的[前面的\也要加入
                    buffer.append(0x5C);
                    buffer.append(letter.toLatin1());
                    continue;
                }
            }
    
            buffer.append(str.mid(i, 1).toLatin1());
    
        }
    
        return buffer;
    }
    
    QString QUIHelper::byteArrayToHexStr(const QByteArray &data)
    {
        QString temp = "";
        QString hex = data.toHex();
    
        for (int i = 0; i < hex.length(); i = i + 2) {
            temp += hex.mid(i, 2) + " ";
        }
    
        return temp.trimmed().toUpper();
    }
    
  • 相关阅读:
    spring事务传播机制实例讲解
    一篇关于交叉编译的文章
    Java中的泛型方法
    层序遍历打印二叉树
    寻找第K大 网易2016实习研发工程师编程题
    二叉树的非递归遍历
    二叉树 网易2016实习研发工程师编程题
    比较重量 网易2016实习研发工程师编程题
    网络地址为172.16.0.0,采用子网掩码255.255.224.0 .以下说法正确的是?
    2.7链表 回文链表
  • 原文地址:https://www.cnblogs.com/feiyangqingyun/p/12732206.html
Copyright © 2020-2023  润新知