最近用到BYTE数组转为CString,CString转为BYTE数组,
下面是C++代码
BYTE数组转CString打印。
CString byteArray2CString(BYTE byteArray [],int arraysize)
{
CString str;
CString strtemp;
for(int i=0;i<arraysize;i++)
{
strtemp.Format(_T("%02x"),byteArray[i]);
str.Append(strtemp);
str.Append(_T(" "));
strtemp.Empty();
}
return str;
}
CString转为BYTE数组
需要用到2个函数
BYTE ConvertHexChar(BYTE ch)
{
if((ch>='0')&&(ch<='9'))
return ch-0x30;
else if((ch>='A')&&(ch<='F'))
return ch-'A'+10;
else if((ch>='a')&&(ch<='f'))
return ch-'a'+10;
else
return -1;
}
void CString2byteArray(CString str,BYTE byteArray [],int bytesize)
{
//CString str ="01 02 03 04";
BYTE tmpByte = 0x00;
int strLen = str.GetLength();
memset(byteArray, '/0', bytesize);
for (int i=0, j=0; i<bytesize,j<strLen; i++,j++)
{
if (str[j] == ' ')
++j;
tmpByte = str[j];
byteArray[i] = ConvertHexChar(tmpByte)<<4;//左移4位
if (str[++j] == ' ')
++j;
tmpByte = str[j];
byteArray[i] = byteArray[i] + (ConvertHexChar(tmpByte) & 0xF);//取低4位然后相加。
}
}
测试程序
void CCStringByteDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
BYTE bytesize[9]={0x01,0x02,0x03,0x04,0x05,0xa5,0xb3,0x5a,0x77};
CString str1=byteArray2CString(bytesize,9);
AfxMessageBox(str1);
CString s("00 02 0a 53 ac bb 09 99 77 0d");
BYTE byteS [10];
CString2byteArray(s,byteS,10);
}