十六进制字符串转换问题 ( 积分: 50 )

  • 主题发起人 主题发起人 m911
  • 开始时间 开始时间
M

m911

Unregistered / Unconfirmed
GUEST, unregistred user!
类似这样的字符串,在转换成正常字符的时候,怎么才能只转换第一个'00'之前的? (注意,如果要取的部分尾数是30或A0或... 的话 不要和00混淆)
3938373635343332313000632101000000E0E912005C
3132333435363738393000E912006D05937C3099632130

这是函数
function HexStringDecode(const S: string): string;
function GetByte(const V: Char): Byte;
begin
case V of
'a'..'f':
Result := Ord(V) - Ord('a') + 10;
'A'..'F':
Result := Ord(V) - Ord('A') + 10;
else
Result := Ord(V) - Ord('0');
end;
end;
var
R: PByte;
P: PChar;
I, Len: Integer;
index,j:integer;
begin
Len := Length(S) div 2;
Result := StringOfChar(#0, Len);
P := PChar(S);
R := PByte(Result);
for I := 1 to Len do
begin
R^ := GetByte(P[0]) * 16 + GetByte(P[1]);
Inc(R);
Inc(P, 2);
end;
end;
 
在 Inc(R) 之前判断一下 R^ 是否等于 0 即可:
R^:=....;
if R^=0 then
begin
Result:=Copy(Result,1,i-1); //截断Result
exit;
end;
Inc(R);
...
 
用循环啊
第次取两个字符
如果这两个字符='00'
那就结束循环
 
谢谢creation-zy 问题已解决 加分
 

Similar threads

I
回复
0
查看
666
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
596
import
I
I
回复
0
查看
628
import
I
后退
顶部