VBのVal関数をDelphiでは

解決


マー  2005-02-10 00:25:01  No: 13140

VBで作成されたプログラムをDelphiで書き換えています。
VBの記述で 
  TEXT = 'FF5B'
  A = Val("&H" + TEXT)
という記述がありまして、16進文字列を数値に変換しています。
上の記述で、A = -165 が返されます。
TEXT = 'FFFF' では A = -1 が返されます。

このような関数がDelphiでもあるのでしょうか?

環境は、WinXP, Delphi5です。


りおりお  2005-02-10 01:00:02  No: 13141

Delphi にも Val() がありますよ。16進文字列の先頭に '$' をつけると
同じようにできます。Delphi では integer 型になるので 'FFFFFFFF' が
-1 になりますけど。普通は StrToInt() を使います。

procedure TForm1.Button1Click(Sender: TObject);
var
  s:string;
  i:integer;
begin
  s := 'FFFFFFFF';
  i := StrToInt('$'+s);
  Label1.Caption := IntToStr(i);
end;


りおりお  2005-02-10 01:10:41  No: 13142

少し変えて、同等になるようにしました。

function VBVal(HexStr:string):integer;
begin
  result := StrToInt('$'+HexStr)-65536;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := IntTostr(VBVal('FF5B'));
end;


とおりすがりん  2005-02-10 01:54:04  No: 13143

重箱ですが、上記では負の値しか返りません。
32768以上かどうかで切り替え、になるでしょうか。


りおりお  2005-02-10 02:04:51  No: 13144

こんなかんじですか?

function VBVal(HexStr:string):integer;
begin
  result := StrToInt('$'+HexStr);
  if (result and $8000) <> 0 then result := result-65536;
end;


りおりお  2005-02-10 02:11:42  No: 13145

すみません、VBって、いまでも整数は16ビットなんですか?
たんにSmallIntにするだけでした。

function VBVal(HexStr:string):SmallInt;
begin
  result := StrToInt('$'+HexStr);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := IntTostr(VBVal('FF5B'));
end;


meke  2005-02-10 02:37:06  No: 13146

VBとDelphi整数の名前が違うので注意してください。
Vb         Delphi
 long        integer
になっています。
Delphiでは、integerは、汎用型ですので
Vbからの移植は  Vb-Delphi変数対応表を一度目を通す方がいいです。


マー  2005-02-10 03:13:11  No: 13147

りおりおさん、mekeさんありがとうございます。
Delphiで16進を扱った事がなかったもので大変勉強になりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加