BCD码求解(150分)

  • 主题发起人 主题发起人 foxnt
  • 开始时间 开始时间
F

foxnt

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟实在低手:对位运算糊里糊涂。
如: 数字:0,1
对应ACSII码为:0011 0000
0011 0001
经BCD码压缩后为: 0000 0001
即取右边的4位。把两个字节变成了1个来发送。用SOCKET发的。
解压则相反。
现问题是:算法知道了,但不知在DELPHI中如何实现。
1 : 如何截取字节的前N BIT?后N BIT?
2 : 截取后如何得到该BIT的值?

因为火烧屁股,恳请高手提供源码(压缩和解压的)。不要说:找HELP!
150大元立即送上
 
只发送 0,1吗?那就不难
 
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;
 
不管 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;
 
多人接受答案了。
 
后退
顶部