喫茶XRAYトップページ

[スレッド全体
]

[10364] Cardinalの型変換返信 削除
2016/9/9 (金) 01:12:13 ny
こんにちは、知識がなく困っています。

文字列変数sに"4294967295"が入っています。
これを整数型のCardinal変数vに型変換して代入したいのですが、
v=strtoint(s);
ではできませんでした。こんな時どんな方法で型変換するのでしょうか?

どなたか教えてください。

[10366] Re:Cardinalの型変換返信 削除
2016/9/9 (金) 11:00:17 Mr.XRAY
▼ nyさん

> 文字列変数sに"4294967295"が入っています。
> これを整数型のCardinal変数vに型変換して代入したいのですが、


これ,Cardinal の最大値ですよね.
Integer の正の最大値を超えていると StrToInt は失敗するようです.
今思いつくのは以下しかありません.

>v=strtoint(s);
>ではできませんでした。


当然できません.v:=strtoint(s); ですね.
Delphi の代入は = ではなくて := です.コロンが必要です (^^;)
もしかして,C++, C#, VB ?
それとも,私の真似をして誤字脱字の類 ?

動作確認は Windows 7 U64(SP1) + Delphi XE(UP1) Pro です.

procedure TForm1.Button1Click(Sender: TObject);
var
  LText     : string;
  LCardinal : Cardinal;
begin
  LText := '4294967295';
  LCardinal := Cardinal(StrToInt64(LText));

  LText := IntToStr(LCardinal);
  MessageBox(Handle, PChar(LText), '結果', MB_ICONINFORMATION);
end;



[10368] Re2:Cardinalの型変換返信 削除
2016/9/9 (金) 14:00:48 taki
▼ Mr.XRAYさん
> ▼ nyさん
>


StrToInt64というのがあるのですね。

Cardinalは汎用型ですよね。
私のPCはWindows7 32Bitなので、Cardinalは0〜4294967295になります。
マスターのPCは64Bitなので、Cardinalはもっと大きな値まで扱えるかも?

私の32BitのPCでも試してみました。
環境 Windows7 32Bit DelphiXE4 Starter

procedure TForm1.Button7Click(Sender: TObject);
var
  v:Cardinal;
  s:string;
begin
  s := '4294967295';
  v := StrToInt64(s);
end;

結果はエラーにならず、vにも4294967295が代入されていました。
※ vはデバッグモードの「監視式」での確認ですが。

StrToIntでは-2147483648〜2147483647の値しか扱えませんが、
StrToInt64ではそれ以上の値も扱えるのですね。

StrToIntをHelp(F1)で表示した時、関連項目にStrToInt64も
あれば良かったのに…と思います。


[10369] Re3:Cardinalの型変換返信 削除
2016/9/9 (金) 14:10:30 taki
> StrToInt64というのがあるのですね。

ちなみに、StrToInt64はDelphi4ぐらいのリファレンスブックに
ちゃんと載っていますので、単に私が知らなかったということです。


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82