2017-06-16 124 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

相關問題