| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1803 人关注过本帖
标题:[求助]谁有16进制转换的程序呀,给我借鉴一下吧
取消只看楼主 加入收藏
wjz
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-9-26
收藏
 问题点数:0 回复次数:4 
[求助]谁有16进制转换的程序呀,给我借鉴一下吧
我在做串口通讯,是个初学者,欢迎大家一起研究讨论
现在需要把字符类型转换成16进制发送出去,不会啦,我用的是mscomm控件,谁能帮帮我啊,谢谢啦
搜索更多相关主题的帖子: 进制 借鉴 串口 
2006-09-26 16:48
wjz
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-9-26
收藏
得分:0 
回复:(fxzmodel)以下是字符/16进制和16进制/字符的...
非常感谢呀,我试试吧
2006-09-27 16:28
wjz
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-9-26
收藏
得分:0 
怎么不对劲儿呢

我把你那个字符转16进制的验证了一下,不对劲呀,例如我写1,结果转成31了,这是1的ASCII码吧。可能是我没说明白,例如我想让下位机接收到10(0AH,下位机接收单元显示16进制,例如发送字符1后显示0031),我PC机该怎么发送才能让它收到对应的数据呢?书上说要把数据用Byte类型发送,我就编了一个,结果还是不可以,再帮我看看吧


procedure TForm1.Button3Click(Sender: TObject);
var
Sendvar:Variant;
Ch1,Ch2:Char;
Byte1,Byte2:Byte;
I:Integer;
begin
Sendvar:=VarArrayCreate([1,Length(edit1.Text) div 2],varByte);
Byte1:=0;
Byte2:=0;
for I:=1 to Length(edit1.Text) div 2 do
begin
Ch1:=edit1.Text[2*I-1];
Ch2:=edit1.Text[2*I];
if (ord(Ch1)>=ord('0')) and (ord(Ch1)<=ord('9')) then
Byte1:=Ord(Ch1)-48
else if (ord(Ch1)>=ord('a')) and (ord(Ch1)<=ord('f')) then
Byte1:=Ord(Ch1)-87
else if (ord(Ch1)>=ord('A')) and (ord(Ch1)<=ord('F')) then
Byte1:=Ord(Ch1)-55;
if (ord(Ch2)>=ord('0')) and (ord(Ch2)<=ord('9')) then
Byte2:=Ord(Ch2)-48
else if (ord(Ch2)>=ord('a')) and (ord(Ch2)<=ord('f')) then
Byte2:=Ord(Ch2)-87
else if (ord(Ch2)>=ord('A')) and (ord(Ch2)<=ord('F')) then
Byte2:=Ord(Ch2)-55;
Sendvar[I]:=Byte1*16+Byte2;
end;
Form1.MSComm1.Output:=Sendvar;

end;

2006-09-29 14:29
wjz
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-9-26
收藏
得分:0 

我这个程序是把字符变量转为字节变量发送出去(给DSP),如果不转化的话,发送的是字符,例如字符1,DSP收到0031,这不是我想要的结果;但是转化为字节变量的话,我在发送字符01,DSP就能收到01了,昨天我又试了下这个程序,只是适用2个字符的情况好用,大概再改一下就可以了,我确实没说明白,呵呵,下面我把这个程序解释一下

procedure TForm1.Button3Click(Sender: TObject);
var //定义变量类型
Sendvar:Variant;
Ch1,Ch2:Char;
Byte1,Byte2:Byte;
I:Integer;
begin
Sendvar:=VarArrayCreate([1,Length(edit1.Text) div 2],varByte);//创建一个variant数组
Byte1:=0;
Byte2:=0;
for I:=1 to Length(edit1.Text) div 2 do
begin
Ch1:=edit1.Text[2*I-1]; //I=1时,把输入的第一个字符赋给Ch1
Ch2:=edit1.Text[2*I]; //I=1时,把输入的第一个字符赋给Ch2,依次类推
if (ord(Ch1)>=ord('0')) and (ord(Ch1)<=ord('9')) then //如果Ch1是0到9的字符,取出Ch1,在ASCII中的位置,然后减去0的位置赋给Byte1
Byte1:=Ord(Ch1)-48
else if (ord(Ch1)>=ord('a')) and (ord(Ch1)<=ord('f')) then
Byte1:=Ord(Ch1)-87
else if (ord(Ch1)>=ord('A')) and (ord(Ch1)<=ord('F')) then
Byte1:=Ord(Ch1)-55;
if (ord(Ch2)>=ord('0')) and (ord(Ch2)<=ord('9')) then
Byte2:=Ord(Ch2)-48
else if (ord(Ch2)>=ord('a')) and (ord(Ch2)<=ord('f')) then
Byte2:=Ord(Ch2)-87
else if (ord(Ch2)>=ord('A')) and (ord(Ch2)<=ord('F')) then
Byte2:=Ord(Ch2)-55;
Sendvar[I]:=Byte1*16+Byte2;
end;
Form1.MSComm1.Output:=Sendvar; //MSComm1.Output是variant变量,书上说要想发送2进制数据,就要把字节型数据放入variant型变量中,所以我采用了这种变换方法,以为是初学,编的可能麻烦了大家原谅啊,国庆中秋双节快乐吧

end;

2006-09-30 10:35
wjz
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2006-9-26
收藏
得分:0 
是呀,我也是才想明白,困扰我好几天了,天资太差了,郁闷!谢谢啦
2006-09-30 10:39
快速回复:[求助]谁有16进制转换的程序呀,给我借鉴一下吧
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011940 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved