Victor你好,我用了你的控件,觉得太棒了!严重支持你!但现在我遇到了一个问题想请教一下:
我用BCB程序通过串口控制2051,从数据存储芯片25165中读出数据,显示在Memo中,比如,我读到了以下数据,在Memo中显示为:
4142434445464748494A4B4C4D4E4F505152535455565758595A
这一串十六进制代码应该为从A到Z的26个字母,我想通过一个按钮让它们显示为ASCII码的形式:
void __fastcall TfrmMain::btnASCModeClick(TObject *Sender)
{
char Buffer[26];
AnsiString str=Memo1->Text;
Memo1->Clear();
HexToBin(str.c_str(),Buffer,26);
Memo1->Text=Memo->Text+Buffer;
}
可是结果却得到了下面的这串ACSII码:
ABCDEFGHIJKLMNOPQRSTUVWXYZl??帻
前面的26个字母没有问题,可是后面的这几个是什么呀?我真的百思不得其解,是不是我的代码由问题?恳请赐教!多谢!!
--------------------next---------------------
Victor:
刚才我又仔细试验了几次,结果是这样的:
我从25165中读出64字节内容(这部分功能由2051程序控制),传到BCB程序的Memo1中。25165中的内容是我提前固化的,为26个字母加上34个字母O再加ABCD,如下:
ABCDEFGHIJKLMNOPQRSTUVWXYZOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOABCD
其在25165中的16进制码为:
41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50
51 52 53 54 55 56 57 58 59 5A 4F 4F 4F 4F 4F 4F
4F 4F 4F 4F 4F 4F 4F 4F 4F 4F 4F 4F 4F 4F 4F 4F
4F 4F 4F 4F 4F 4F 4F 4F 4F 4F 4F 4F 41 42 43 44
读到Memo中的代码如下:
void __fastcall TfrmMain::Timer1Timer(TObject *Sender)
{
unsigned char Buf[64];
int n = comMain->Read(Buf,64);
AnsiString s;
for(int i=0; i s = s.Trim();
if(!s.IsEmpty())
{
memMain->Text=memMain->Text+s;
}
}
读到Memo1中的结果如下:
4142434445464748494A4B4C4D4E4F505152535455565758595A4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F41424344
在窗体上放置一个按钮组件,希望达到一点击次按钮就把Memo1中的内容转换为相应的ASCII码。如下:
void __fastcall TfrmMain::Button1Click(TObject *Sender)
{
char Buffer[64]
AnsiString str=Memo1->Text;
Memo1->Clear();
HexToBin(str.c_str(),Buffer,64);
Memo1->Text=Memo1->Text+Buffer;
}
点击此按钮后Memo1中出现下面结果:
ABCDEFGHIJKLMNOPQRSTUVWXYZOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOABCD??帻
不知道这后面几位字符是怎么来的。而且好像这种情况还总在变化,也就是说,后几位的出现并不固定,重启之后就不一样。
--------------------next---------------------
阅读(1061) | 评论(0) | 转发(0) |