H
honghs
Unregistered / Unconfirmed
GUEST, unregistred user!
最近在搞一个pos机的系统,是pax公司的pos机,海南工行就是用这玩意。
其实我的程序只要向与pc机连接的串口发送一串指定格式的字符就行了。
按照它的"pos机与pc通讯接口说明书"上说的格式如下:
stx[1] 一字节,固定为0x02 ,其实就是delphi中的#2嘛
length[2]二字节,其后跟随数据的长度,以压缩bcd形式存放,高字节在前
data[...]数据
etx[1] 一字节,固定为0x03,就是#3了
lrc[1]一字节检验码,从length开始到etx为止的各字节依次异或值
现在我需要一个能生成lehgth[2]这个压缩bcd形式的代码,还有能把bcd转成我可以认的
长度的代码。
那位老大给个真正能用的吧,我在dfw上找了一下,发现都只是些简单的代码片断,运行
起来好象没什么结果。
这是以前的贴子内容,好象没什么用啊,再把bcd转成长度的话,会少数据的。
*************
话题256024的标题是: BCD码求解 (150分)
分类:Internet/TCPIP foxnt (2000-05-30 12:20:08)
小弟实在低手:对位运算糊里糊涂。
如: 数字:0,1
对应ACSII码为:0011 0000
0011 0001
经BCD码压缩后为: 0000 0001
即取右边的4位。把两个字节变成了1个来发送。用SOCKET发的。
解压则相反。
现问题是:算法知道了,但不知在DELPHI中如何实现。
1 : 如何截取字节的前N BIT?后N BIT?
2 : 截取后如何得到该BIT的值?
因为火烧屁股,恳请高手提供源码(压缩和解压的)。不要说:找HELP!
150大元立即送上
Kang (2000-05-30 12:24:30)
只发送 0,1吗?那就不难
Kang (2000-05-30 12:30:44)
b:array [1..2] of byte;
b->BCD:
BCD:=b[1] and $0f shl 4+b[2] and $0f;
BCD->b
b[1]:=BCD and $0f0 shr 4+$30;
b[2]:=BCD abd $0f0 + $30;
SuperMMX (2000-05-30 12:55:54)
不管 ascii 的事,
一个字符串为 s = '014748'( 前提是你的 s 都是数字, 长度被2 整除)
i, j, k: Integer;
bcd: Integer;
begin
for i := 0 to Length(s) div2 - 1 do
begin
j := ord(s[2 * i + 1]) - 48;
k := ord(s[2 * i + 2]) - 48;
bcd := j shl 4 + k;
//now you can send bcd;
end;
//bcd to two char
var
ch1, ch2: char;
begin
ch1 := chr((bcd and $f0) shr 4 + 48);
ch2 := chr((bcd and $0f) + 48);
end;
end;
foxnt (2000-06-03 15:23:49)
多人接受答案了。
Kang-50,SuperMMX-100,的回答最终被接受。
***********
其实我的程序只要向与pc机连接的串口发送一串指定格式的字符就行了。
按照它的"pos机与pc通讯接口说明书"上说的格式如下:
stx[1] 一字节,固定为0x02 ,其实就是delphi中的#2嘛
length[2]二字节,其后跟随数据的长度,以压缩bcd形式存放,高字节在前
data[...]数据
etx[1] 一字节,固定为0x03,就是#3了
lrc[1]一字节检验码,从length开始到etx为止的各字节依次异或值
现在我需要一个能生成lehgth[2]这个压缩bcd形式的代码,还有能把bcd转成我可以认的
长度的代码。
那位老大给个真正能用的吧,我在dfw上找了一下,发现都只是些简单的代码片断,运行
起来好象没什么结果。
这是以前的贴子内容,好象没什么用啊,再把bcd转成长度的话,会少数据的。
*************
话题256024的标题是: BCD码求解 (150分)
分类:Internet/TCPIP foxnt (2000-05-30 12:20:08)
小弟实在低手:对位运算糊里糊涂。
如: 数字:0,1
对应ACSII码为:0011 0000
0011 0001
经BCD码压缩后为: 0000 0001
即取右边的4位。把两个字节变成了1个来发送。用SOCKET发的。
解压则相反。
现问题是:算法知道了,但不知在DELPHI中如何实现。
1 : 如何截取字节的前N BIT?后N BIT?
2 : 截取后如何得到该BIT的值?
因为火烧屁股,恳请高手提供源码(压缩和解压的)。不要说:找HELP!
150大元立即送上
Kang (2000-05-30 12:24:30)
只发送 0,1吗?那就不难
Kang (2000-05-30 12:30:44)
b:array [1..2] of byte;
b->BCD:
BCD:=b[1] and $0f shl 4+b[2] and $0f;
BCD->b
b[1]:=BCD and $0f0 shr 4+$30;
b[2]:=BCD abd $0f0 + $30;
SuperMMX (2000-05-30 12:55:54)
不管 ascii 的事,
一个字符串为 s = '014748'( 前提是你的 s 都是数字, 长度被2 整除)
i, j, k: Integer;
bcd: Integer;
begin
for i := 0 to Length(s) div2 - 1 do
begin
j := ord(s[2 * i + 1]) - 48;
k := ord(s[2 * i + 2]) - 48;
bcd := j shl 4 + k;
//now you can send bcd;
end;
//bcd to two char
var
ch1, ch2: char;
begin
ch1 := chr((bcd and $f0) shr 4 + 48);
ch2 := chr((bcd and $0f) + 48);
end;
end;
foxnt (2000-06-03 15:23:49)
多人接受答案了。
Kang-50,SuperMMX-100,的回答最终被接受。
***********