首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

显示有关问题

2012-03-01 
显示问题我从单片机串口发送“12ab” c++builder不是原样显示(我还想显示123 abc)unsigned char Buf[8192]

显示问题
我从单片机串口发送“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;    } 

热点排行