//char*转16进制
DWORD HEXS(char *decString)
{
DWORD hexValue=0;
DWORD sl=0;
BOOL isWhile=FALSE;
DWORD idx=0;
char str[256];
BYTE ct=0;
sl=strlen(decString);
if((sl>0) && (sl<256))
isWhile=TRUE;
strcpy(str,decString);
idx=0;
while(isWhile)
{
ct=(BYTE)(str[idx]);
switch(ct)
{
case 48: // "0"
hexValue=hexValue<<4;
hexValue+=0x0;
break;
case 49: // "1"
hexValue=hexValue<<4;
hexValue+=0x01;
break;
case 50: // "2"
hexValue=hexValue<<4;
hexValue+=0x02;
break;
case 51: // "3"
hexValue=hexValue<<4;
hexValue+=0x03;
break;
case 52: // "4"
hexValue=hexValue<<4;
hexValue+=0x04;
break;
case 53: // "5"
hexValue=hexValue<<4;
hexValue+=0x05;
break;
case 54: // "6"
hexValue=hexValue<<4;
hexValue+=0x06;
break;
case 55: // "7"
hexValue=hexValue<<4;
hexValue+=0x07;
break;
case 56: // "8"
hexValue=hexValue<<4;
hexValue+=0x08;
break;
case 57: // "9"
hexValue=hexValue<<4;
hexValue+=0x09;
break;
case 65: // "A"
hexValue=hexValue<<4;
hexValue+=0x0a;
break;
case 97: // "a"
hexValue=hexValue<<4;
hexValue+=0x0a;
break;
case 66: // "B"
hexValue=hexValue<<4;
hexValue+=0x0b;
break;
case 98: // "b"
hexValue=hexValue<<4;
hexValue+=0x0b;
break;
case 67: // "C"
hexValue=hexValue<<4;
hexValue+=0x0c;
break;
case 99: // "c"
hexValue=hexValue<<4;
hexValue+=0x0c;
break;
case 68: // "D"
hexValue=hexValue<<4;
hexValue+=0x0d;
break;
case 100: // "d"
hexValue=hexValue<<4;
hexValue+=0x0d;
break;
case 69: // "E"
hexValue=hexValue<<4;
hexValue+=0x0e;
break;
case 101: // "e"
hexValue=hexValue<<4;
hexValue+=0x0e;
break;
case 70: // "F"
hexValue=hexValue<<4;
hexValue+=0x0f;
break;
case 102: // "f"
hexValue=hexValue<<4;
hexValue+=0x0f;
break;
default: //unknown char
isWhile=FALSE;
break;
}
idx++;
if(idx>=sl)
isWhile=FALSE;
}
return hexValue;
}
//Cstring转16进制Cstring
CString ConvertCStringoHex(CString Data)
{
//char*转为wchar_t*
char* CStr = Data.GetBuffer( Data.GetLength() );
size_t len = strlen(CStr) + 1;
size_t converted = 0;
wchar_t* a = (wchar_t*)malloc(len*sizeof(wchar_t));
mbstowcs_s(&converted, a, len, CStr, _TRUNCATE);
//CString转换成char[]
int nLen = WideCharToMultiByte( CP_ACP, 0, a, -1, NULL, 0, NULL, NULL );
if (nLen == 0)
{
return NULL;
}
char* pResult = new char[nLen];
char tagChar[2048];
WideCharToMultiByte( CP_ACP, 0, a, -1, pResult, nLen, NULL, NULL );
strncpy( tagChar,pResult , sizeof(tagChar));
//转换成hex
CString sResult="";
int nLoop=0;
while(tagChar[nLoop]!='\0')
{
static const char *hex="0123456789ABCDEF";
if(tagChar[nLoop]<127&&tagChar[nLoop]>0)
{
//sResult += '0';
//sResult += '0';
unsigned char chHexA = hex[((unsigned char)(tagChar[nLoop]) >> 4) & 0x0f];
unsigned char chHexB = hex[(unsigned char)(tagChar[nLoop]) & 0x0f];
sResult += (char)chHexA;
sResult += (char)chHexB;
nLoop++;
}
else
{
unsigned char chHexA = hex[((unsigned char)(tagChar[nLoop]) >> 4) & 0x0f];
unsigned char chHexB = hex[(unsigned char)(tagChar[nLoop]) & 0x0f];
sResult += (char)chHexA;
sResult += (char)chHexB;
if(tagChar[++nLoop]=='\0') break;
sResult+= hex[((unsigned char)(tagChar[nLoop]) >> 4) & 0x0f];
sResult+=hex[(unsigned char)(tagChar[nLoop]) & 0x0f];
nLoop++;
}
}
return sResult;
}
//HexChar函数的功能是将16进制字符由ASCII码转为相应大小的16进制数
char HexChar(char c)
{
if((c>='0')&&(c<='9'))
return c-'0';//将?0-9的??数?y字??字??符¤?转?a为a十??六?¨?进?制?格?式??
else if((c>='A')&&(c<='F'))
return c-'A'+10;//将?A-F的??字??符¤?转?a为a十??六?¨?进?制?格?式??例¤y如¨?字??符¤?'C'-'A'+10=12=0x0C
else if((c>='a')&&(c<='f'))
return c-'a'+10;//将?a-f的??字??符¤?转?a为a十??六?¨?进?制?格?式??
else
return 0x10;
}
//Str2Hex函数的功能则是将如“66 03 ...”形式的字符串以空格为间隔转换为对应的16进制数
//并存放在BYTE型(typdef unsigned char BYTE)数组中,
//data数组作为发送缓冲数组写入串口即可。
int Str2Hex(CString str, BYTE *data)
{
int t,t1;
int rlen=0,len=str.GetLength();
if(len==1)
{
char h=str[0];
t=HexChar(h);
data[0]=(BYTE)t;
rlen++;
}
//data.SetSize(len/2);
for(int i=0;i<len;)
{
char l,h=str[i];
if(h==' ')
{
i++;
continue;
}
i++;
if(i>=len)
break;
l=str[i];
t=HexChar(h);
t1=HexChar(l);
if((t==16)||(t1==16))//判D断?为a非¤?法¤?§的??16进?制?数?y
break;
else
t=t*16+t1;
i++;
data[rlen]=(BYTE)t;
rlen++;
}
return rlen;
}