名前 題名 ▼ takaさん > ▼ nyさん > > LCardinal := Cardinal(StrToInt64(LText)); > > これでうまく変換できました。 > > LCardinal := StrToInt64(LText); > > これでもエラーになりませんが「0」がかえってくることがありました。 > 型の数値の範囲を外れると0になったり想定外の数値になります。 > > 例:Cardinal(StrToInt64('-1')); 結果: 4294967295 > 例:Cardinal(StrToInt64('4294967296')); 結果: 0 > > Cardinalは、符号なし整数なので (Cardinal 0..4294967295) > 文字列から「0または正数」に変換するので以下の処理が必要です > ・負の数値の文字列の処理 > エラーとするか、0にするか,Cardinalの最大値とするか > ・オーバーフローの処理 > エラーとするか、0にするか,Cardinalの最大値とするか > > 直接 Cardinal変数に代入するのではなく > 一度Int64型の変数に代入してから処理してください。 > > procedure TForm1.Button1Click(Sender: TObject); > var > v : Cardinal; > i64 : int64; > begin > i64 := StrToInt64('4294967296'); > if (i64 < 0) then > begin > // raise EIntError.Create('正数を入力してください'); > i64 := 0; > end; > if (i64 > $FFFFFFFF) then > begin > // raise EIntOverflow.Create('Cardinalのサイズを超えました'); > i64 := $FFFFFFFF; > end; > v := Cardinal(i64); > ShowMessage(IntToStr(v)); > end; GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link