头文件
#pragma once
#include <QString>
class CPublicFun
{
public:
CPublicFun();
~CPublicFun();
static QString GetCurrentDataTime();
//获取从2000年1月1日0点0分0秒的时间戳
static int GetCurrentDataTimeStamp();
//获取 时间戳 + 2000年1月1日0点0分0秒 的 时间戳
static int GetDateTimeByStamp(int iTimeStamp);
//获取 时间戳 + 2000年1月1日0点0分0秒 的 时间
static QString GetDateTimeStringByStamp(int iTimeStamp);
//设置系统时间
static void SetTime(int iTimeStamp);
//获取第一个Ip
static QString getHostIpAddress();
//获取Mac地址
static QString getHostMacAddress();
//获取Mac地址
static void getHostMacAddress(unsigned char* pOutMAC,int &iLen);
static QString getHostMacAddressEx();
//16进制显示内存
static void MemoryToHex(const char*pInData,int iInDataLen,char* pOutData,int &iOutDataLen);
static void ShowDataToLog(QString strHeader, unsigned char*pInData, int iInDataLen);
static QString GetDeviceID();
static void GetServerTestData(unsigned char cCmd, unsigned char cSubCmd,unsigned char* pOutBUf, int &iOutDataLen);
static unsigned short GetCRC(const unsigned char * pDataBuf, int iBufLen);
static void GetHistoryDataSrcPath(QString &strPath);
static void SetHistoryDataSrcPath(QString strPath);
static bool FileIsExist(QString strFile);
};
源文件
#include "PublicFun.h"
#include <QDateTime>
#include <QNetworkInterface>
#include <QList>
#include <QCoreApplication>
#include <QFile>
#include <QDir>
#include <windows.h>
#include "TransLogWid/LogNotify.h"
#include "include/DataDef.h"
extern CLogOperEx * g_DataInteractionLog;
CPublicFun::CPublicFun()
{
}
CPublicFun::~CPublicFun()
{
}
QString CPublicFun::GetCurrentDataTime()
{
QDateTime time = QDateTime::currentDateTime(); //获取当前时间
QString strTime = time.toString("yyyy-MM-dd hh:mm:ss");
return strTime;
}
int CPublicFun::GetCurrentDataTimeStamp()
{
//时间戳计算从2000年1月1日零点以来的秒数
QDateTime datetime;
int iBaseTime = datetime.fromString("2000-01-01 00:00:00", "yyyy-MM-dd hh:mm:ss").toTime_t();
QDateTime time = QDateTime::currentDateTime(); //获取当前时间
int iStartTime = time.toTime_t(); //将当前时间转为时间戳
return iStartTime - iBaseTime;
}
int CPublicFun::GetDateTimeByStamp(int iTimeStamp)
{
QDateTime datetime;
int iBaseTime = datetime.fromString("2000-01-01 00:00:00", "yyyy-MM-dd hh:mm:ss").toTime_t();
return iTimeStamp + iBaseTime;
}
QString CPublicFun::GetDateTimeStringByStamp(int iTimeStamp)
{
int iDateTimeStamp = GetDateTimeByStamp(iTimeStamp);
QDateTime time = QDateTime::fromTime_t(iDateTimeStamp);
QString strTime = time.toString("yyyy-MM-dd hh:mm:ss");
return strTime;
}
void CPublicFun::SetTime(int iTimeStamp)
{
SYSTEMTIME st;
memset(&st, 0, sizeof(SYSTEMTIME));
int iDateTimeStamp = GetDateTimeByStamp(iTimeStamp);
QDateTime time = QDateTime::fromTime_t(iDateTimeStamp);
st.wYear = time.date().year();
st.wMonth = time.date().month();
st.wDay = time.date().day();
st.wHour = time.time().hour();
st.wMinute = time.time().minute();
st.wSecond = time.time().second();
st.wMilliseconds = time.time().msec();
SetLocalTime(&st);
}
QString CPublicFun::getHostIpAddress()
{
QString strIpAddress;
QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();
// 获取第一个本主机的IPv4地址
int nListSize = ipAddressesList.size();
for (int i = 0; i < nListSize; ++i)
{
if (ipAddressesList.at(i) != QHostAddress::LocalHost &&
ipAddressesList.at(i).toIPv4Address() && ipAddressesList.at(i).toString().left(3) == "192")
{
strIpAddress = ipAddressesList.at(i).toString();
break;
}
}
// 如果没有找到,则以本地IP地址为IP
if (strIpAddress.isEmpty())
strIpAddress = QHostAddress(QHostAddress::LocalHost).toString();
return strIpAddress;
}
QString CPublicFun::getHostMacAddress()
{
QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();// 获取所有网络接口列表
int nCnt = nets.count();
QString strMacAddr = "";
for (int i = 0; i < nCnt; i++)
{
// 如果此网络接口被激活并且正在运行并且不是回环地址,则就是我们需要找的Mac地址
if (nets[i].flags().testFlag(QNetworkInterface::IsUp) && nets[i].flags().testFlag(QNetworkInterface::IsRunning) && !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack))
{
strMacAddr = nets[i].hardwareAddress();
break;
}
}
return strMacAddr;
}
void CPublicFun::getHostMacAddress(unsigned char* pOutMAC, int &iLen)
{
QString strMac = getHostMacAddress();
sscanf(strMac.toStdString().c_str(), "%02x:%02x:%02x:%02x:%02x:%02x", pOutMAC, pOutMAC + 1, pOutMAC + 2, pOutMAC + 3, pOutMAC + 4, pOutMAC + 5);
iLen = 6;
}
QString CPublicFun::getHostMacAddressEx()
{
QString strMac = getHostMacAddress();
unsigned char addr[10] = {0};
sscanf(strMac.toStdString().c_str(), "%02x:%02x:%02x:%02x:%02x:%02x", addr, addr + 1, addr + 2, addr + 3, addr + 4, addr + 5);
QString strRet(( char*)addr);
return strRet;
}
void CPublicFun::MemoryToHex(const char*pInData, int iInDataLen,char* pOutData, int &iOutDataLen)
{
QString strRet;
char szBuf[BUF_SIZE] = { 0 };
for (int i = 0; i < iInDataLen; i++)
{
char szTmp[5] = { 0 };
sprintf(szTmp, "%02X ", pInData[i]);
strcat(szBuf, szTmp);
}
iOutDataLen = iInDataLen * 2;
memcpy(pOutData,szBuf,iOutDataLen);
}
void CPublicFun::ShowDataToLog(QString strHeader, unsigned char*pInData, int iInDataLen)
{
int iOutLen = 0;
char szBuf[BUF_SIZE] = { 0 };
for (int i = 0; i < iInDataLen; i++)
{
char szTmp[5] = { 0 };
sprintf(szTmp, "%02X ", pInData[i]);
strcat(szBuf, szTmp);
}
g_DataInteractionLog->LogInfo("[%s][%s][%d] %s:%s ", __FILE__, __FUNCTION__, __LINE__, strHeader.toStdString().c_str(), szBuf);
}
QString CPublicFun::GetDeviceID()
{
static QString strDeviceID = getHostMacAddress();
return strDeviceID;
}
void CPublicFun::GetServerTestData(unsigned char cCmd, unsigned char cSubCmd, unsigned char* pOutuf, int &iOutDataLen)
{
int iIndex = 0;
unsigned char szBufTemp[BUF_SIZE] = { 0 };
szBufTemp[iIndex++] = 0x0f; //报文头
szBufTemp[iIndex++] = 0x00; //报文头
szBufTemp[iIndex++] = 0x01; //版本号
szBufTemp[iIndex++] = cCmd; //报文类型
unsigned short usLen = 23; //报文长度
int iCrcLen = 19;
if (cCmd == MSG_TYPE_QUERY)
{
usLen = 22;
iCrcLen = 18;
}
memcpy(&szBufTemp[iIndex], &usLen, 2);
iIndex += 2;
unsigned char szMac[10] = { 0 };
int iLen = 0;
CPublicFun::getHostMacAddress(szMac, iLen);
memcpy(&szBufTemp[iIndex], szMac, 6);//设备ID
iIndex += 6;
iIndex += 4;//报文ID
int iTime = CPublicFun::GetCurrentDataTimeStamp();
memcpy(&szBufTemp[iIndex], &iTime, 4);//时间搓
iIndex += 4;
if (0 != cSubCmd)
{
szBufTemp[iIndex++] = cSubCmd;//01Ok 80no 消息体
}
iIndex += 4; //预留
int iCrc = GetCRC((unsigned char*)&szBufTemp[6], iCrcLen);
memcpy(&szBufTemp[iIndex], &iCrc, 4);//CRC
iIndex += 4;
szBufTemp[iIndex++] = 0x55; //报文尾
szBufTemp[iIndex++] = 0xAA;
unsigned char szOutBuf[BUF_SIZE] = { 0 };
sprintf((char*)szOutBuf, "flag cmd=%02X suncmd=%02X :", cCmd, cSubCmd);
int isize = sizeof("flag cmd=02 suncmd=02 :");
for (int i = 0; i < iIndex; i++)
{
char szTmp[5] = { 0 };
sprintf(szTmp, "%02X", szBufTemp[i]);
strcat((char*)&szOutBuf, szTmp);
isize += 2;
}
strcat((char*)&szOutBuf, "\n");
isize += sizeof("\n");
memcpy(pOutuf,szOutBuf,isize);
iOutDataLen = isize - 2;
}
unsigned short CPublicFun::GetCRC(const unsigned char * pDataBuf, int iBufLen)
{
unsigned short CRC = 0;
unsigned char i;
while (iBufLen-- > 0)
{
CRC = (CRC ^ (((unsigned int)*pDataBuf) << 8));
for (i = 0; i < 8; i++)
{
if (CRC & 0x8000) CRC = ((CRC << 1) ^ 0x1021);
else CRC <<= 1;
}
pDataBuf++;
}
return CRC;
}
void CPublicFun::GetHistoryDataSrcPath(QString &strFilePath)
{
QString strPath = QCoreApplication::applicationDirPath();
QString strFileName;
strFileName.append(strPath);
strFileName.append("/srcData/DataSrcPath.txt");
QFile file(strFileName);
if (file.open(QIODevice::ReadOnly)) // 以只读的方式打开
{
QByteArray by;
char *bf = NULL;
by = file.readAll();
bf = by.data();
strFilePath.append(by);
}
file.close();
}
void CPublicFun::SetHistoryDataSrcPath(QString strFilePath)
{
QString strPath = QCoreApplication::applicationDirPath();
QString strFileName;
strFileName.append(strPath);
strFileName.append("/srcData/DataSrcPath.txt");
QFile file(strFileName);
file.open(QIODevice::WriteOnly);
QByteArray byte = QTextCodec::codecForName("UTF-8")->fromUnicode(strFilePath);
file.write(byte);
file.close();
}
bool CPublicFun::FileIsExist(QString strFile)
{
QFile file(strFile);
if (file.exists())
{
return true;
}
return false;
}