📄 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<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 + -