www.pudn.com > BlueToothExc.rar > PublicFunc.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= _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=_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