串口编程16进制显示问题

void CComTestDlg::OnComm()
{
// TODO: Add your control notification handler code here

 VARIANT variant_inp;//定义一个VARIANT类对象 
 COleSafeArray safearray_inp;//定义一个COleSafeArray对象
 LONG len,k;  
 BYTE rxdata[2048];//设置BYTE数组 AN 8—intterthat is not signed.  
 CString strtemp;  

if (m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有数据 
{   
    ////以下你可以根据自己的通信协议加入处理代码
    variant_inp=m_ctrlComm.GetInput();//读缓冲区   
    safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量 
    len=safearray_inp.GetOneDimSize(); 
 for(k=0;k<len;k++)   
 {   
     safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组  
 } 
  for(k=0;k<len;k++)//将数组转换为Cstring型变量    
 {    
      BYTE bt=*(char*)(rxdata+k);   

    strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放    
    m_strRXData+=strtemp;//加入接收编辑框对应字符串   
  }  
}  
UpdateData(FALSE);//更新编辑框内容(主要是接收编辑框中的)

}


显示代码如上,请问怎样改才能让它16进制显示

strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放

%c 改为%X 不就行了

strtemp.Format("%x ",bt); // 不正确那就单步看看是否运行了这步代码、。。。

朋友你解决了么?我也有相同的问题!

我在书上看的这个程序,书上还教了如何添加一个十六进制的框,勾选之后可以将它用十六进制表示,但是我试着做了之后,发下接受框什么也没有接收到,啥也不显示……就连乱码也没有