⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stringchang.cpp

📁 多文档界面设计配置文件读写串口操作串口封装类
💻 CPP
字号:
#include "StdAfx.h"
#include ".\stringchang.h"

CStringChang::CStringChang(void)
{
}

CStringChang::~CStringChang(void)
{
}

// 将字符串转换为16进制,俩个字符间插入了一个空格
int CStringChang::String2Hex(CString str, CByteArray& senddata)
{
	int hexdata, lowhexdata;
	int hexdatalen = 0;
	int len = str.GetLength();
	senddata.SetSize(len/2);

	for (int i = 0; i < len; )
	{
		char lstr, hstr = str[i];
		if (hstr == ' ')	//如果遇到空格则跳过
		{
			i++;
			continue;
		}
		i++;
		if (i >= len)
			break;

		lstr = str[i];
		if ((hexdata = ConvertHexChar(hstr)) == -1)
		{
			AfxMessageBox("输入字符超出16进制范围,无法按16进制正常发送",MB_ICONERROR);		//将高字符转换为16进制字符
			return -1;
		}
		if ((lowhexdata = ConvertHexChar(lstr)) == -1)	//再将低字符转换为16进制字符
		{
			AfxMessageBox("输入字符超出16进制范围,无法按16进制正常发送",MB_ICONERROR);		//将高字符转换为16进制字符
			return -1;
		}

		if ((hexdata ==16) || (lowhexdata == 16))
			break;							//如果这俩个字符中任意一个大于16则跳出
		else
			hexdata = hexdata*16 + lowhexdata;	//否则把俩个字符叠加
		i++;
		senddata[hexdatalen] = (char)hexdata;	//保存到要发送的缓冲区中
		hexdatalen++;
	}

	senddata.SetSize(hexdatalen);
	return hexdatalen;
}

// 将一个字符转换为相应的十六进制
char CStringChang::ConvertHexChar(char ch)
{
	if ((ch >= '0') && (ch <= '9'))
		return ch - 0x30;
	else if ((ch >= 'A') && (ch <= 'F'))
		return ch - 'A' + 10;
	else if ((ch >= 'a') && (ch <= 'f'))
		return ch - 'a' + 10;
	else
		return (-1);
}
//可打印字符串转换为字节数据
// 如:"C8329BFD0E01" --> {0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01}
// 输入:   pSrc   源字符串
// 输出:   pDst   字节数据
// 返回:          字节数据长度
int CStringChang::String2Bytes(const char*  pSrc, int nSrcLength, unsigned char* pDst)
{
	for (int i = 0; i < nSrcLength; i += 2)
	{
		// 输出高4位
		if ((*pSrc >= '0') && (*pSrc <= '9'))
		{
			*pDst = (*pSrc - '0') << 4;
		}
		else
		{
			if ((*pSrc >= 'a') && (*pSrc <= 'f'))
			{
				*pDst = (*pSrc - 'a' + 10) << 4;
			}
			else
			{
				*pDst = (*pSrc - 'A' + 10) << 4;
			}
		}
		
		pSrc++;

		// 输出低4位
		if ((*pSrc>='0') && (*pSrc<='9'))
		{
			*pDst |= *pSrc - '0';
		}
		else
		{
			if((*pSrc >= 'a') && (*pSrc <= 'f'))
			{
				*pDst |= *pSrc - 'a' + 10;
			}
			else
			{
				*pDst |= *pSrc - 'A' + 10;
			}
		}
		pSrc++;
		pDst++;
	}
	return (nSrcLength)/2;	
}

// 两个字节高地位转换
unsigned short CStringChang::lowhigh(unsigned short* pRes)
{
	int highbt = *pRes<<8;
	int lowbt = *pRes>>8 ;
	short highlow = highbt | lowbt;
	return highlow;
}
// 字节数据转换为可打印字符串
// 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} --> "C8329BFD0E01" 
// 输入: pSrc - 源数据指针
//       nSrcLength - 源数据长度
// 输出: pDst - 目标字符串指针
// 返回: 目标字符串长度
int CStringChang::Bytes2String(const unsigned char* pSrc, int nSrcLength, char* pDst)
{
	const char tab[]="0123456789ABCDEF";	// 0x0-0xf的字符查找表

	for (int i = 0; i < nSrcLength; i++)
	{
		*pDst++ = tab[*pSrc >> 4];		// 输出高4位
		*pDst++ = tab[*pSrc & 0x0f];	// 输出低4位
		pSrc++;
	}

	// 输出字符串加个结束符
	*pDst = '\0';

	// 返回目标字符串长度
	return (nSrcLength * 2);
}

void CStringChang::SplitString(CStringArray& arString, CString csSource, LPCTSTR pSplit)
{
	int   i=-1;   
    do   
    {   
        i=csSource.Find(pSplit,   0);   
        if(i > 0)   
        {   
           arString.Add(csSource.Left(i));   
           csSource = csSource.Right(csSource.GetLength() - i - strlen(pSplit));//这里有了变化,这样才能以任意字符串做分割符   
        }                       
   }   
   while(i>-1);   
  arString.Add(csSource);   

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -