因为是用USB通信,单片机识别指令一般都是十六进制,和串口差不多,我的起始目的是想获取Edit Control控件中的字符串,然后每两个字符转换成一个16进制数,如Edit Control控件中输入了:EEA200022266,我把它处理成0XEE,0XA2,0X00,0X02,0X22,0X66(我这是一个IIC写命令
)。
首先我们分析问题:
1.从Edit Control控件中获取输入的字符串,得到的是CString类型的数据。
a.我们包含#include <string>头文件
b.我们会用到命名空间:在头文件下面包含using namespace std;
c.CString ST,Ti;int Len = 0 ,i=0;int y[i]={0};unsigned char packet[256];
memset(packet, 0x00, 256);
GetDlgItem(IDC_EDIT_TX)->GetWindowText(ST);//从 IDC_EDIT_TX控件中获取的数据放在ST中。
Len=ST.GetLength();//长度
SetDlgItemInt(IDC_EDIT_RX,Len);//在另外一个Edit Control控件中显示长度(可以不要)
for(i=0;i<Len;i++)
{
Ti=Str.Mid(i,1);//一个个取字符
y[i]=strtol((LPSTR)(LPCTSTR)Ti,NULL,16);//将每个字符转换成一个16进制数
}
for(i=0;i<Len/2;i++)
{
packet[i]=(BYTE)(y[i*2]*16+y[i*2+1]);//每两个字符组合成一个十六进制发送
}
这样packet数组中存放的就是0xAA形式的十六进制数据了!
这种方法没有用到很多库函数,我当时也一心想找库函数,最后还是发现自己写吧!!!不要想的那么复杂,就当CString------int-----16进制,按照这个流程!
本文介绍如何从C++中的EditControl控件获取字符串,并将其转换为十六进制数。通过使用CString类型和标准库函数,实现了字符串的逐字符读取及十六进制转换。
转换&spm=1001.2101.3001.5002&articleId=39555773&d=1&t=3&u=157170c97c384397adce35db2926dc39)
350

被折叠的 条评论
为什么被折叠?



