2017-06-16 1 views
0

Delphiスクリプト化パスカルベースのプログラムEZGPIBの10進文字列(0〜26億の範囲)を16進文字列に変換します。インターネット上で適切なコードを見つけたようですが、EZGPIBに正しく実装するのに問題があります。多分、パスカルに堪能な人が私を助けることができますか? EZGPIBはGoogleで利用でき、インストールせずに動作します。 ":= chrです(W)S [0];" 文字列の範囲のうちで:HERESにコード:私はそれをコンパイルしようとEZGPIB:16進文字列を16進数に変換する(Delphi Scripted 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 - > "s:= Chr(w);"とすると、コードはコンパイルされ、 "gwar:= hex(15,1);"の最大入力で動作します。

答えて

1

これは、現代のパスカルがもはや有効ではない文字列の内部動作に関する知識を使用するかなり古くからの実装です。 s [0]は '長さバイト'を参照し、文字列の長さを効果的に固定しました。 SetLength(s、w)は、現代の同等のものになります。

+0

魅力的な作品です!どうもありがとうございました! :) – Echo88

関連する問題