信息编码问题 高手请进!!!(10分)

  • 主题发起人 主题发起人 king_213
  • 开始时间 开始时间
K

king_213

Unregistered / Unconfirmed
GUEST, unregistred user!
假如有一个十六进制字符串 Str:='0E42504F584B2B417A0F3A0E5623565D53500F33360E365656583B750F202F200E4E64342853500F32370E365656583B750F2F200E30323B5533323A7E53500F33360E365656583B750F202F200E3A2A352653500F32340E365656583B750F202F200E307C4D3753500F32360E365656583B750F202F200E4E643A3A53500F3'(是经过编码的)
我想将它还原成编码前的字符串 其中'0E'和'0F'之间的内容是汉字 不过要将'0E' 和 '0F'去掉 并且将其中的每个表示汉字的十六进制字符的高位置1 然后再将十六进制字符串转换为汉字字符串 能不能请高手写一个函数 实现上述功能 小弟不胜感激!!! 我的分很少 不好意思!!!
 
这种转换很容易,你自己仔细考虑一下就行了。
应该自己联系着写代码,那样才有成就感.
 
我写不出来呀 请高手帮帮忙吧!!!
 
假如有一个十六进制字符串 Str:='0E42504F584B2B417A0F3A0E5623565D53500F33360E365656583B750F202F200E4E64342853500F32370E365656583B750F2F200E30323B5533323A7E53500F33360E365656583B750F202F200E3A2A352653500F32340E365656583B750F202F200E307C4D3753500F32360E365656583B750F202F200E4E643A3A53500F3'(是经过编码的)
我想将它还原成编码前的字符串 其中'0E'和'0F'之间的内容是汉字 不过要将'0E' 和 '0F'去掉 并且将其中的每个表示汉字的十六进制字符的高位 变为1 (也就是与80取或) 然后再将十六进制字符串转换为汉字字符串 能不能请高手写一个函数 实现上述功能 小弟不胜感激!!! 我的分很少 不好意思!!!
 
0E
42 50 4F 58
4B 2B 41 7A
0F
去除0E和0F: pos, delete
高位置1: xor
还原为中文,查一下资料, 我不会.
楼上的说得对, 自己想想,很有成就感滴
 
搞錯了, 高位置1, or
 
我的问题其实就是POCSAG码的解码问题 请高手赐教!!!
 
了解了编码规则就能很容易编出来了。
 
能不能写个代码???谢谢了
 
procedure TForm1.Button1Click(Sender: TObject);
var
Str,Tmp,Det: String;
Hex,i: Integer;
begin
Str := '0E42504F584B2B417A0F3A0E5623565D53500F33360E365656583B750F202F200E4E64342853500F32370E365656583B750F2F200E30323B5533323A7E53500F33360E365656583B750F202F200E3A2A352653500F32340E365656583B750F202F200E307C4D3753500F32360E365656583B750F202F200E4E643A3A53500F3';
for i := 1 to Str[0] - 1 do
begin
Tmp := Str + Str[i+1];
Hex := StrToInt('$'+Tmp);
Inc(i);
if Hex = $0E then Continue;
if Hex = $0F then Continue;
Hex := Hex + $80;
Det := Det + Char(Hex);
end;
//det 就是解密后的字符串
end;
 
上面代码运行不了,错了.对不起发出的东西太不责任了
procedure TForm1.Button1Click(Sender: TObject);
var
Str,Tmp,Det: String;
Hex,i: Integer;
begin
Str := '0E42504F584B2B417A0F3A0E5623565D53500F33360E365656583B750F202F200E4E64342853500F32370E365656583B750F2F200E30323B5533323A7E53500F33360E365656583B750F202F200E3A2A352653500F32340E365656583B750F202F200E307C4D3753500F32360E365656583B750F202F200E4E643A3A53500F3';
i := 1;
while i < Length(Str) - 1 do
begin
Tmp := Str + Str[i+1];
Hex := StrToInt('$'+Tmp);
inc(i,2);
if Hex = $0E then Continue;
if Hex = $0F then Continue;
Hex := Hex + $80;
Det := Det + Char(Hex);
end;
Tmp := Det;
//det 就是解密后的字符串
end;
 
我上面说的不太正确 应该是这样的:
假如有一个十六进制字符串 Str:='0E42504F584B2B417A0F3A0E5623565D53500F33360E365656583B750F202F200E4E64342853500F32370E365656583B750F2F200E30323B5533323A7E53500F33360E365656583B750F202F200E3A2A352653500F32340E365656583B750F202F200E307C4D3753500F32360E365656583B750F202F200E4E643A3A53500F3'(是经过编码的)
我想将它还原成编码前的字符串 其中'0E'和'0F'之间的内容是汉字 不过要将'0E' 和 '0F'去掉 并且将其中的每两个表示汉字的十六进制字符的后一个十六进制字符的高位 变为1 (也就是与80取或) 然后再将两个十六进制字符转换为汉字字符 '0F'和'0E'之间的内容是每一个十六进制字符表示一个字母或数字 直接将一个十六进制字符转换为一个字母或数字
该如何写这个函数呀???
 
后退
顶部