显示有关问题

显示问题
我从单片机串口发送“12ab” c++builder不是原样显示(我还想显示123 abc) 
unsigned char Buf[8192]; //收到的字节数不会超过串口缓存的容量, 所以分配一个缓存容量相同的Buf
  int n = YbCommDevice1->Read(Buf,8192); //收到 n 个字节
for(int i=0; i<n; i++)
  s += IntToHex(Buf[i],2) + " ";
  s = s.Trim();

  if(!s.IsEmpty())
  Memo1->Lines->Add(s);

显示的是49 50 97 98 各位老师 怎么还原成12ab呀 有函数不?能否给个程序 谢谢了

------解决方案--------------------
单片机串口发送“12ab”你是16进制发送的吗?

你发送的字符,IntToHex(Buf[i],2)转换1(0x31)自然是49;

你可以将Buf[i]强制转换成字符,
------解决方案--------------------
C/C++ code

#include <vcl.h>
#pragma hdrstop
#include <stdio.h>  //添加头文件


#include "Unit1.h"
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString str = Edit1->Text;//12ab
    Edit2->Text = "";
    int iLen = str.Length();
    AnsiString stp="";
    AnsiString sRet="";
    for (int i=1;i<=iLen;i++)
    {
        int stem = 0;
        stem = int(str[i]);
        stp  = IntToHex(stem,2);
        sRet = sRet+stp;
    }
    Edit2->Text = sRet.Trim();

    char T;
    int i = sRet.Length();
    AnsiString Temp = "";
    for(int k = 0;k<i/2;k++)
    {
        sscanf((sRet.SubString(k*2+1,2)).c_str(),"%x",&T);
        Temp = Temp + T;
    }

    Edit3->Text = Temp;//恢复 12ab
}

------解决方案--------------------
IntToStr已经转成字符类型了。
你自己串口发送过来的是什么进制或者类型不知道?

另外上面的例子自己照样子把他编译运行一下,就明白了。下面这段代码已经帮你把16进制的hex信息还原成了AnsiString.
C/C++ code

    char T;
    int i = sRet.Length();//sRet  16进制
    AnsiString Temp = "";//恢复结果
    for(int k = 0;k<i/2;k++)
    {
        sscanf((sRet.SubString(k*2+1,2)).c_str(),"%x",&T);
        Temp = Temp + T;
    }