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

📄 publicfunc.cpp

📁 一个蓝牙的应用程序
💻 CPP
字号:
#include "StdAfx.h"
#include "PublicFunc.h"

CPublicFunc::CPublicFunc(void)
{
}

CPublicFunc::~CPublicFunc(void)
{
}

CString hwFormatMessage ( DWORD dwErrorCode )
{
	CString csError;
	LPVOID pv;
    FormatMessage (
		FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
		NULL,
		dwErrorCode,
		MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
		(LPTSTR)&pv,
		0,
		NULL);
	if(pv)
	{
		csError = (LPCTSTR)pv;
		LocalFree ( pv );
	}

	return csError;
}

//
// 等待线程退出
//
BOOL WaitForThreadEnd ( HANDLE *phThread, DWORD dwWaitTime /*=5000*/ )
{
	BOOL bRet = TRUE;
	ASSERT ( phThread );
	if ( !(*phThread) ) return TRUE;
	if ( ::WaitForSingleObject ( *phThread, dwWaitTime ) == WAIT_TIMEOUT )
	{
		bRet = FALSE;
		::TerminateThread ( *phThread, 0 );
	}
	::CloseHandle ( *phThread );
	(*phThread) = NULL;
	return bRet;
}

CString Data2HexString ( char *data, int size, int nBytesPerLine/*=16*/ )
{
	CString csHexString, csTemp;
	for ( int i=0; i<size; i++ )
	{
		csTemp.Format ( L"%02X ", (BYTE)data[i] );
		csHexString += csTemp;
		if ( (i+1) % nBytesPerLine == 0 )
			csHexString += "\r\n";
	}
	return csHexString;
}

BYTE HexCharToData(TCHAR cChar)
{
	if ( cChar >= _T('0') && cChar <= _T('9') )
		return (BYTE)(cChar-_T('0'));
	if ( cChar >= _T('a') && cChar <= _T('f') )
		return (BYTE)(cChar-_T('a')+0x0a);
	if ( cChar >= _T('A') && cChar <= _T('F') )
		return (BYTE)(cChar-_T('A')+0x0A);
	return 0xff;
}

//
// 将一个16进制的字符串转换为16进制的数,返回数据长度
// 例如:将字符串“61 62 63 64 65 66 67 68”转换成数据 [0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68]
// 保存到 szOutBuffer 缓冲中
//
int ConvStringToHexData(CString csOrgStr, BYTE *szOutBuffer, int nOutBufferSize)
{
	ASSERT ( szOutBuffer && nOutBufferSize > 0 );
	// 先得到有效的16进制字符串,同时将表示16进制的标志“0x”去掉
	CString csLegalHexStr;
	csOrgStr.MakeLower();
	csOrgStr.Replace ( _T("0x"), _T("") );
	for ( int i=0; i<csOrgStr.GetLength(); i++ )
	{
		TCHAR c = csOrgStr.GetAt (i);
		if ( (c>=_T('0')&&c<=_T('9')) || (c>=_T('a') && c<= _T('f')) )
		{
			csLegalHexStr += c;
		}
	}

	if ( csLegalHexStr.GetLength() < 1 ) return 0;

	// 不是偶数个字符则在后面补“0”
	if ( (csLegalHexStr.GetLength() % 2) != 0 )
		csLegalHexStr += _T("0");

	int j=0;
	for ( int i=0; j<nOutBufferSize && i<csLegalHexStr.GetLength(); i+= 2 )
	{
		BYTE btData = 0;
		BYTE bLo = ( 0x0f & HexCharToData ( csLegalHexStr.GetAt(i+1) ) );
		BYTE bHi = ( 0x0f & HexCharToData ( csLegalHexStr.GetAt(i) ) );
		if ( bLo == 0xff || bHi == 0xff )
			return -1;
		btData = ( bHi << 4 ) | bLo;
		szOutBuffer[j++] = btData;
	}

	return j;
}

⌨️ 快捷键说明

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