Tcolor型の16進数をテキストに変換したいのですが、そもそも16進数は整数として扱われているのでしょうか?
おもろい質問やな〜 ポリポリ
Memo1.Lines.Add('$'+IntToHex($00ff00ff, 8));
Memo1.Lines.Add('$'+IntToHex(clFuchsia, 8));
Memo1.Lines.Add('$'+IntToHex(clWindow, 8));
Memo1.Lines.Add('$'+IntToHex(clHighlightText, 8));
>そもそも16進数は整数として扱われているのでしょうか?
うーむ、何進数というのは数を表現する規則なのであって、整数とか実数とか
とは別の概念です。上の質問を
そもそも10進数は整数として扱われているのでしょうか?
としてみれば、そのちぐはぐさがわかるでしょう。
Delphi6 のヘルプでは
type TColor = -$7FFFFFFF-1..$7FFFFFFF;
となっています。$7FFFFFFF を16進数で表現しても10進数で表現しても
2進数で表現しても、定義の中身は同じです。
柿の種さん、anoneさんありがとうございます。
「16進数は整数」というのは IntToStr関数が使えるのかどうか気になったので、でも柿の種さんのサンプルを見てみると
>Memo1.Lines.Add('$'+IntToHex($00ff00ff, 8));
これは、16進数表示の整数を16進数のテキストに変換しているということなのですか?
よく「10進数を16進数に表示するには?」という質問に対して、
「それは表現がオカシイ。16進表示に表示するには、だろ?」っていうツッコミをよくみます
大概の場合、16進数っていえば文字列だ、と解釈すればよいのです。
> 大概の場合、16進数っていえば文字列だ、と解釈すればよいのです。
そんなことはありません。
数値をその文字列表示を混同するのは間違いのもとです。
> これは、16進数表示の整数を16進数のテキストに変換しているということなのですか?
そうです。数値とそれに対応する文字列とは厳密に区別してくださいね。
普通に $10 と書けばそれは数値であり、10進表示の 16 になります。
var
i:integer;
begin
i := $10;
....
というふうにできます。対応する16進表示の文字列は '$10' です。
IntToHex(i,2) は '10' を、IntToStr(i) は '16' を返します。
柿の種さん、anoneさん、ピピさん。ありがとうございます。
あやふやだった、16進数のことがよくわかりました。
ツイート | ![]() |