1 Star 5 Fork 5

TMRNic/LabTool-V2

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
mydatatype.cpp 4.76 KB
一键复制 编辑 原始数据 按行查看 历史
TMRNic 提交于 2024-12-02 02:01 +08:00 . new file: gnss_parse.cpp
#include "mydatatype.h"
//线程资源同步
QQueue<quint8> threadBuffer;
QReadWriteLock rwLock; //读写锁
QList<QString> threadBuffer_g;
QReadWriteLock rwLock_g; //读写锁
//数据类型
const uint8_t myChar = 0;
const uint8_t myUint8_t = 1;
const uint8_t myShort = 2;
const uint8_t myUint16_t = 3;
const uint8_t myInt = 4;
const uint8_t myUint32_t = 5;
const uint8_t myFloat = 6;
const uint8_t myDouble = 7;
const uint8_t _3bytesToInt = 8;
const uint8_t _2bytesToInt = 9;
//数据类型名
const QStringList myDataTypeList = (QStringList()<<"char"<<"uint8_t"<<"short"<<"uint16_t"<<"int"<<"uint32_t"<<"float"<<"double"<<"3bytesToInt"<<"2bytesToInt");
myDataType::myDataType()
{
endianModex = little_Endian;
}
short myDataType::func_2bytesToShort(uint8_t *buffer)
{
if(endianModex == little_Endian){
_2bytesToShort.buf[0] = *(buffer++);
_2bytesToShort.buf[1] = *(buffer++);
}else{
_2bytesToShort.buf[1] = *(buffer++);
_2bytesToShort.buf[0] = *(buffer++);
}
return _2bytesToShort.var;
}
uint16_t myDataType::func_2bytesToUint16(uint8_t *buffer)
{
if(endianModex == little_Endian){
_2bytesToUint16.buf[0] = *(buffer++);
_2bytesToUint16.buf[1] = *(buffer++);
}else{
_2bytesToUint16.buf[1] = *(buffer++);
_2bytesToUint16.buf[0] = *(buffer++);
}
return _2bytesToUint16.var;
}
int myDataType::func_4bytesToInt(uint8_t *buffer)
{
if(endianModex == little_Endian){
_4bytesToInt.buf[0] = *(buffer++);
_4bytesToInt.buf[1] = *(buffer++);
_4bytesToInt.buf[2] = *(buffer++);
_4bytesToInt.buf[3] = *(buffer++);
}else{
_4bytesToInt.buf[3] = *(buffer++);
_4bytesToInt.buf[2] = *(buffer++);
_4bytesToInt.buf[1] = *(buffer++);
_4bytesToInt.buf[0] = *(buffer++);
}
return _4bytesToInt.var;
}
uint32_t myDataType::func_4bytesToUint32(uint8_t *buffer)
{
if(endianModex == little_Endian){
_4bytesToUint32.buf[0] = *(buffer++);
_4bytesToUint32.buf[1] = *(buffer++);
_4bytesToUint32.buf[2] = *(buffer++);
_4bytesToUint32.buf[3] = *(buffer++);
}else{
_4bytesToUint32.buf[3] = *(buffer++);
_4bytesToUint32.buf[2] = *(buffer++);
_4bytesToUint32.buf[1] = *(buffer++);
_4bytesToUint32.buf[0] = *(buffer++);
}
return _4bytesToUint32.var;
}
float myDataType::func_4bytesToFloat(uint8_t *buffer)
{
if(endianModex == little_Endian){
_4bytesToFloat.buf[0] = *(buffer++);
_4bytesToFloat.buf[1] = *(buffer++);
_4bytesToFloat.buf[2] = *(buffer++);
_4bytesToFloat.buf[3] = *(buffer++);
}else{
_4bytesToFloat.buf[3] = *(buffer++);
_4bytesToFloat.buf[2] = *(buffer++);
_4bytesToFloat.buf[1] = *(buffer++);
_4bytesToFloat.buf[0] = *(buffer++);
}
return _4bytesToFloat.var;
}
double myDataType::func_8bytesToDouble(uint8_t *buffer)
{
if(endianModex == little_Endian){
_8bytesToDouble.buf[0] = *(buffer++);
_8bytesToDouble.buf[1] = *(buffer++);
_8bytesToDouble.buf[2] = *(buffer++);
_8bytesToDouble.buf[3] = *(buffer++);
_8bytesToDouble.buf[4] = *(buffer++);
_8bytesToDouble.buf[5] = *(buffer++);
_8bytesToDouble.buf[6] = *(buffer++);
_8bytesToDouble.buf[7] = *(buffer++);
}else{
_8bytesToDouble.buf[7] = *(buffer++);
_8bytesToDouble.buf[6] = *(buffer++);
_8bytesToDouble.buf[5] = *(buffer++);
_8bytesToDouble.buf[4] = *(buffer++);
_8bytesToDouble.buf[3] = *(buffer++);
_8bytesToDouble.buf[2] = *(buffer++);
_8bytesToDouble.buf[1] = *(buffer++);
_8bytesToDouble.buf[0] = *(buffer++);
}
return _8bytesToDouble.var;
}
int myDataType::func_3bytesToInt(uint8_t* buffer)
{
if(endianModex == big_Endian){
_4bytesToInt.buf[3] = *(buffer++);
_4bytesToInt.buf[2] = *(buffer++);
_4bytesToInt.buf[1] = *(buffer++);
_4bytesToInt.buf[0] = 0x00;
}else{
_4bytesToInt.buf[0] = 0x00;
_4bytesToInt.buf[1] = *(buffer++);
_4bytesToInt.buf[2] = *(buffer++);
_4bytesToInt.buf[3] = *(buffer++);
}
return (_4bytesToInt.var >> 8);
}
int myDataType::func_2bytesToInt(uint8_t *buffer)
{
if(endianModex == big_Endian){
_2bytesToShort.buf[1] = *(buffer++);
_2bytesToShort.buf[0] = *(buffer++);
}else{
_2bytesToShort.buf[0] = *(buffer++);
_2bytesToShort.buf[1] = *(buffer++);
}
return (int)_2bytesToShort.var;
}
void myDataType::updateEndianMode(int modex)
{
if(modex == 0)
{
endianModex = little_Endian;
}else if(modex == 1)
{
endianModex = big_Endian;
}else
{
endianModex = little_Endian; //默认为小端模式
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/tmrnic/lab-tool-v2.git
git@gitee.com:tmrnic/lab-tool-v2.git
tmrnic
lab-tool-v2
LabTool-V2
main

搜索帮助