您的位置:首页 > 其它

CString类型字符串,转换到 BYTE类型

2009-03-07 15:53 316 查看
VC中,MSComm通信控件,使用串口进行数据通信,
从Edit Box获取字符串CString,转换为BYTE,再转换为CByteArray,
然后转换为COleVariant,发送出去。
************************************************************************
方法一:

CString text="a0";

int d = 0;
sscanf(text, "%x", &d);
BYTE bt = (BYTE)d;

具体:

UpdateData(TRUE); // 从Edit Box获取字符串CString m_strSendASCII

CByteArray arraySend;
arraySend.RemoveAll();
//arraySend.SetSize(10); 10必须为准确字节数,不然其后补0,满10位

BYTE byte[100];
int n = 0;
CString str = m_strSendASCII;

int str_length = str.GetLength();
CString strTemp;

// 用于统计字符串长度
CString str_Box;
str_Box.Format("%d", str_length);
MessageBox(str_Box);

// 字符串转换为 BYTE 类型
// 方式一:sscanf(strTemp, "%02x", &int_temp);
for (int i = 0; i < str_length; )
{
strTemp = str.Mid(i, 2);
//byte
= static_cast<BYTE>(atoi(strTemp2.GetBuffer(10)));
int int_temp = 0;

sscanf(strTemp, "%02x", &int_temp);
byte
= (BYTE)int_temp;

i += 2;
n++;
strTemp.ReleaseBuffer();
}

for (n = 0; n < str_length / 2; n++)
{
//arraySend.SetAt(n, byte
); // arraySend.SetSize(10); 如果发送少于10个字节,那会补0,到10个字节
arraySend.Add(byte
);
}
m_MSComm1.SetOutput(COleVariant(arraySend));
}

********************************************************************************************************

方法二:

UpdateData(TRUE); // 从Edit Box获取字符串CString m_strSendASCII

CByteArray arraySend;
CString str = m_strSendASCII;
BYTE data[100];
BYTE temp;

if (str.GetLength() % 2 != 0)
{
MessageBox("输入字符串的字符个数不为偶数,请重新输入");
m_strSendASCII = "";
UpdateData(FALSE);
}
else
{
for(int i = 0; i < str.GetLength(); i += 2)
{
if ((str[i] >= '0') && (str[i] <= '9'))
{
data[i]= str[i] - '0';
}
else if ((str[i] >= 'a') && (str[i] <= 'z'))
{
data[i]= str[i] - 'a' + 10;
}
else if ((str[i] >= 'A') && (str[i] <= 'Z'))
{
data[i]= str[i] - 'A' + 10;
}
else
{
MessageBox("输入错误,请检查,并重新输入");
}
data[i] = data[i] << 4;

if ((str[i + 1] >= '0') && (str[i + 1] <= '9'))
{
temp= str[i + 1] - '0';
}
else if ((str[i + 1] >= 'a') && (str[i + 1] <= 'z'))
{
temp= str[i + 1] - 'a' + 10;
}
else if ((str[i + 1] >= 'A') && (str[i + 1] <= 'Z'))
{
temp= str[i + 1] - 'A' + 10;
}
else
{
MessageBox("输入错误,请检查,并重新输入");
}

data[i] |= temp;
arraySend.Add(data[i]);
}
m_MSComm1.SetOutput(COleVariant(arraySend));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐