#ifndef PQ_UTILS_FUNC_H #define PQ_UTILS_FUNC_H #include #include /*** * 通讯处理的公共函数 */ namespace PQ { /// 代码和校验 uchar daiMaHe(const QByteArray & ch, int len ); /// CRC 校验 ushort CRC(const QByteArray & ch,int len); /// LRC 校验 uchar LRC(const QByteArray & ch,int len); /// BCC 异或校验和 uchar XOR(const QByteArray & ch,int len); /// 反转 QByteArray QByteArray reverse(const QByteArray & ch); /// 获取 QByteArray 的每一位的值 QBitArray getBits(const QByteArray & ch); /// 把 QBitArray 转换为字节数组 QByteArray toBytes(const QBitArray & bits); /// 分割BIT数组 QBitArray midBitArray(const QBitArray & array,int start, int lenght = -1); ///把 ASCII转化为对应的整数值 uint AsciitoInt(const uchar Byte); ///MurmurHash3 算法 算string hash值 quint32 hashString(const QString & hash); /// 数字和 QbyteArray转换 template QByteArray number2ByteArray(T v){ int size = sizeof(T); char * ch = reinterpret_cast(&v); return QByteArray(ch,size); } template T byteArray2number(QByteArray & ary){ if(ary.isEmpty()) return 0; switch(ary.size()){ case 2: { ushort rv = 0; memcpy(&rv,ary.data(),2); return static_cast(rv); } case 4: { uint rv = 0; memcpy(&rv,ary.data(),4); return static_cast(rv); } case 8: { qint64 rv = 0; memcpy(&rv,ary.data(),8); return static_cast(rv); } } return static_cast(ary.at(0)); } } #endif // DATAPACK_H