100分求解16进制转换问题 ( 积分: 100 )

  • 主题发起人 主题发起人 loverofangel
  • 开始时间 开始时间
L

loverofangel

Unregistered / Unconfirmed
GUEST, unregistred user!
在做串口通讯,比如我要给终端发送时间进行时间校对,而我本地的时间是用字符串表示的。举例来说,我的年只用后两位表示:'05',那么如何转换成16进制的05呢?就是用2进制来表示是0000 0100,我有点迷糊了,大侠们赶紧帮我看看吧。
 
在做串口通讯,比如我要给终端发送时间进行时间校对,而我本地的时间是用字符串表示的。举例来说,我的年只用后两位表示:'05',那么如何转换成16进制的05呢?就是用2进制来表示是0000 0100,我有点迷糊了,大侠们赶紧帮我看看吧。
 
是不是使用byte($05)就可以了?这样发送过去的一个字节里边是不是0000 0100?
 
通讯传输中,你可以不用考虑 二机制的。
定义通讯数据中时间 如 年月日,时分秒 的格式。
例如 采用 一字节、十六进制表示 2005 07 15 --> $05 $07 $0F
当获取数据包是,进行日期时间重组,然后于本地时间比较
 
如何把16进制的数字组装起来发出去啊,我用的spcomm的WriteCommData方法,第一个参数是PAnsiChar格式的,是要把这些16进制的数组成字符串吗?那每个16进制数还是一个字节吗?对方接收的时候有没有影响?
 
那是一个指针 从指针开始 一直到#0结束
具体这中间的内容和格式 要看你终端有什么样的要求
 
终端要求用16进制的。
我是不是可以这样:050715这个串,对每一个都strtoint,然后IntToHex,然后把得到的16进制字符串连接起来,发送。可以吗?
我用Sizeof求每一个字符转IntToHex以后结果都是4,那还是要求的一字节吗?
 
TDateTime 实际上是 Double 类型
比如 1/1/1996 12:00 am 是 35065

我不清楚你的终端要求的是 35065 的16进制表示 还是'1/1/1996'的16进制表示
 
他是这样要求的,就是我给他把05用16进制发过去,他收到的数据是单字节的05,就是00000100,我的问题其实就是如何把一个字符串(全是数字,比如‘050715’)转化成16进制发送到终端。
 
那么
var
buf: array [0..99] of Byte;
begin
buf[1] := 05;
buf[2] := 07;
buf[3] := 15;
end;

不就可以了吗?
 
自己写一个转化16进制的表,
要的时候从里面查找啊
 
var
buf: array [0..99] of Byte;
begin
buf[1] :=$05;
buf[2] :=$07;
buf[3] :=$15;
end;
============
应该是这样!
 
那用IntToHex函数形成的串传过去是什么东西?是$05呢,还是它的ASCII码?
 
当然是十六进制了
 
你说的是BCD码!!
呵呵!
function ToBCD(vData: Integer): Byte;
var
a: Byte;
begin
a := Byte(vData mod 100);

Result := a + (a div 10) * 6;

end;
function FromBCD(vData: Byte): Integer;
var
a: Integer;
begin
a := (vData div 16) *10 + (vData mod 16);

Result :=a;

end;
 

Similar threads

回复
0
查看
848
不得闲
回复
0
查看
1K
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
D
回复
0
查看
909
DelphiTeacher的专栏
D
后退
顶部