在C语言中,经常定义一个这样的数组:
unsigned char buf[100] = {0};
但这个数组的长度是固定的,不能动态变化。在MFC中,可以使用CByteArray、CString达到这个目的:
//--------------------------------------------
// 使用CString 的对无符号字节的存取
//--------------------------------------------
// 写入
CString buf1;
buf1 += (unsigned char)0x01;
buf1 += (unsigned char)0x02;
buf1 += (unsigned char)0x10;
buf1 += (unsigned char)0xFF;
//读取
printf("%d\n", buf1.GetLength());
CString str;
CString str1;
for (int i=0; i<buf1.GetLength(); i++)
{
unsigned char x = (unsigned char)buf1[i];
str.Format("%02x ", x);
str1 += str;
}
AfxMessageBox(str1);
//--------------------------------------------
// 使用CByteArray 对无符号字节的存取
//--------------------------------------------
//写入
CByteArray arry;
arry.Add(0x41);
arry.Add(0x00);
arry.Add(0xFF);
arry.Add(0x22);
//读取
str1.Empty();
for (i=0; i<arry.GetSize(); i++)
{
unsigned char x = (unsigned char)arry[i];
str.Format("%02x ", x);
str1 += str;
}
AfxMessageBox(str1);
CByteArray用起来比较直观,不说了;使用CString时,不管是读取或者写入,一定注意使用(unsigned char)转型。这也算是CString的另外一个用法吧。
2016_05_06编辑:如果使用在VC下使用mscomm控件,“发送”的动作里,就可以使用CByteArray或者CString,例如在VC6中:
unsigned char p[5] = {0x99, 0x00, 0x00, 0x00, 0x77};
m_Array.RemoveAll(); //CByteArray类型
m_Array.SetSize(5);
for(int i=0; i<5; i++)
m_Array.SetAt(i, p[i]);
m_Comm1.SetOutput(COleVariant(m_Array));
VS2008中:
CByteArray array;
array.Add(0x30);
array.Add(0x08);
array.Add(0x0A);
array.Add(0x9F);
m_cComm.put_Output(COleVariant(array));//发送数据