直接上代码
头文件
#pragma once
#include <string>
using namespace std;
class CSerial
{
public:
CSerial();
virtual ~CSerial();
//功能:打开串口
//参数:nPort 串口号
// nBaudRate 波特率
// bOverlapped 是否异步串口
// dwInQueueSize 读缓冲区大小
// dwOutQueueSize 写缓冲区大小
//返回:ture-成功、false-失败
bool Open(const short& nPort, const long& nBaudRate, const bool& bOverlapped = false, DWORD dwInQueueSize = 1024, DWORD dwOutQueueSize = 4096);
//功能:关闭串口
void Close();
//功能:获取读缓冲区的数据大小
//返回:数据字节数
DWORD GetRxBufferCount();
//功能:读取数据
//参数:pBuffer 接收缓冲区
// nReadSize 传入需要接收的字节数和返回实际接收的字节数
//返回:ture-成功、false-失败
bool ReadData(unsigned char *pBuffer, unsigned long& nReadSize);
// 发送数据
//功能:打开
//参数:pBuffer 发送缓存区
// nWriteSize 传入需要发送的字节数和返回实际发送的字节数
//返回:ture-成功、false-失败
bool SendData(const unsigned char *pBuffer, unsigned long& nWriteSize);
//功能:是否打开串口
//返回:ture-打开、false-关闭
bool IsOpened();
//功能:清空读取缓冲区
void ClearBuffer();
//功能:十六进制数据 转 字符串
//参数:bytes 原始数据
// nDataLength 数据字节数
//返回:十六进制字符串(例如:0A10EF)
string ByteArrayToHexString(const unsigned char bytes[], const int& nDataLength);
//功能:字符串 转 十六进制数据
//参数:strHexString 十六进制字符串(例如:0A10EF)
// outBytes 输出数据
//返回:ture-成功、false-失败
bool HexStringToByteArray(const string& strHexString, unsigned char outBytes[]);
//功能:转大写
//参数:str 字符串
//返回:字符串
string& UpperString(string &str);
private:
DCB m_Dcb; //串口配置文件
bool m_bOverlapped; //异步串口
bool m_bOpened; //是否打开标识
HANDLE m_hCom; //串口句柄
};