| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #ifndef PQ_UTILS_FUNC_H
- #define PQ_UTILS_FUNC_H
- #include <QByteArray>
- #include <QBitArray>
- /***
- * 通讯处理的公共函数
- */
- 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<typename T>
- QByteArray number2ByteArray(T v){
- int size = sizeof(T);
- char * ch = reinterpret_cast<char *>(&v);
- return QByteArray(ch,size);
- }
- template<typename T>
- 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<T>(rv);
- }
- case 4:
- {
- uint rv = 0;
- memcpy(&rv,ary.data(),4);
- return static_cast<T>(rv);
- }
- case 8: {
- qint64 rv = 0;
- memcpy(&rv,ary.data(),8);
- return static_cast<T>(rv);
- }
- }
- return static_cast<T>(ary.at(0));
- }
- }
- #endif // DATAPACK_H
|