int i = 100
CString str
str.Format(_T(ŔX%08X"), i)
大写X代表大写表示,08代表用8个0填充。
HexChar函数的功能是将16进制字符由ASCII码转为相应大小的16进制数
char HexChar(char c)
{
if((c>=Ɔ')&&(c<=Ə'))
return c-Ɔ'//将?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=0i<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
}
对于接收到的数据,位于接收缓冲区的BYTE数组RecBuf中,如果要以相应大小的16进制形式显示,刚可以将数组中每一个元素以下列格式转换并放入字符串RecText中,即可实现以16进制显示。
CString RecText,str
for(int i=0i<Rleni++)
{
str.Format("%02X ",RecBuf[i])//将接收到的BYTE型数据转换为对应的十六进制
RecText.Append(str)
}