2017-06-16 122 views
0

我想在Delphi脚本化的基于Pascal的程序EZGPIB中将十进制字符串(范围在0到26十亿之间)转换为十六进制字符串。我似乎在互联网上找到了一段合适的代码,但在EZGPIB中无法正确实现。也许有人在帕斯卡流利可以帮助我做到这一点? EZGPIB可在谷歌上使用,无需安装。继承人的代码:EZGPIB:将十进制字符串转换为十六进制(Delphi脚本Pascal)

program hex_conv; 

var 
gwar:string; 

function Hex(v: Longint; w: Integer): String; 
var 
s    : String; 
i    : Integer; 
hexc   : array [0 .. 15] of Char; 
begin 
hexc[0] := '0'; 
hexc[1] := '1'; 
hexc[2] := '2'; 
hexc[3] := '3'; 
hexc[4] := '4'; 
hexc[5] := '5'; 
hexc[6] := '6'; 
hexc[7] := '7'; 
hexc[8] := '8'; 
hexc[9] := '9'; 
hexc[10] := 'A'; 
hexc[11] := 'B'; 
hexc[12] := 'C'; 
hexc[13] := 'D'; 
hexc[14] := 'E'; 
hexc[15] := 'F'; 
s[0] := Chr(w); 
for i := w downto 1 do begin 
s[i] := hexc[v and $F]; 
v := v shr 4 
end; 
Result := s; 
end; 

begin 
EZGPIB_ScreenClear; 
gwar:=hex(15,1); 
EZGPIB_ScreenWriteLn(gwar); 
gwar:=hex(1,1); 
EZGPIB_ScreenWriteLn(gwar); 
end. 

的EZGPIB编译抛出RuntimeError如果我尝试编译:在停止字符串范围的 “S [0]:= CHR(W);”如果我拿走s - >“s:= Chr(w);”的方括号,那么代码将编译并为最大输入“gwar:= hex(15,1);”起作用。

回答

1

这是一个相当老式的实现,它使用有关现代Pascal中不再有效的字符串内部工作原理的知识。 s [0]引用'length byte'并有效地固定了字符串的长度。 SetLength(s,w)将是现代等价物。

+0

工程就像一个魅力!非常感谢你! :) – Echo88

相关问题