MFC 32位API函数实现串口通信,16进制接收时,接收的都是其ASIC码,求大神赐教

10进制收发都没问题,16进制发送时,我用串口调试助手接收都是正确的,只有16进制接收时有问题,求大神赐教,如何正确接收16进制数据。

第1个回答  2013-08-27
十进制收发没有问题则十六进制就没有问题,应该是你对接收到的数据理解错误引起的。追问

char lbuffer[10]; //用以提取接收缓冲区数据
。。。
若我用串口调试助手发送1234
当接收过之后
if(lbuffer[1] == 2){} //此if就进不去
if(lbuffer[1] == '2'){} //这个if可以进去
若我用串口调试助手发送16进制12 fe 34 ac
然后我接收的数据都是此16进制对应10进制ASIC码值
求继续赐教

追答

应该是调试助手发送数据的问题,应该是把16进制对应10进制ASIC码值发生出去,你可以对接收和发生的数据进行统计.

第2个回答  2013-08-27
“16进制发送时,我用串口调试助手接收都是正确的,只有16进制接收时有问题”
这是什么意思?MFC接收16有问题?

有可能你接收的是正常的,只是你看到的不正常。
就是说你确定你看到的是真实的吗?追问

char lbuffer[4]; //用以提取接收缓冲区数据
。。。
若我令lbuffer[4] = {0x12,0xfe,0x34,0xac};
然后发送出去,我的串口调试助手也只能按16进制接收正常
若我用串口调试助手发送16进制12 fe 34 ac
然后我接收的数据都是此16进制对应10进制ASIC码值if(lbuffer[1] == 0xfe){}是进不去的
求继续赐教

追答

是数据类型的问题。

char lbuffer[4];这里是char,而你想要显示的是16进制。你可以自己转一下。

最好用unsigned char。下面的代码,你可以学习借鉴下。

//ASCII To Char 
   
  unsigned char s[10] ;  
  s[0] = 0x35 ;  
  s[1] = 0x37 ;  
  s[2] = 0x61 ;  
  s[3] = 0 ;  
  scanf("%d",&s);  
  CString  Str ;  
  for(int i=0;i<10;i++)  
  {  
    char c=(char)s[i];  
    Str +=c ;  
  }  
  MessageBox(Str); 
   
  //char to ASCII  

 char a;
int num;
int ix=0;
do{
cout<<"输入a: "<<endl;
cin>>a;
ix++;

num = a-'!'+33;//得到a对应的ASCII
cout<<a<<"的ASCII为: "<<num<<endl;

}while(ix=10);

//----
int Char2ASCII(char c)
{
return  (c-'!'+33);
}
//----

本回答被提问者采纳
相似回答
大家正在搜