16進数の桁数
62 IntHexDigit 動作確認 Delphi2007 更新日 2008/01/31(木)
2010/06/23(水)

IntToHexの第二引数は最小桁数ですが
それを考慮しないで変換すると
    IntToHex(10, 1)→A
    IntToHex(300,1)→12C
となります。

当然ですが場合によっては桁数を揃えたいときがあります。
何桁でそろえるのがいいでしょうか。

Integerの場合
                                  12345678
    IntToHex(High(Integer), 1) → 7FFFFFFF
    IntToHex(           -1, 1) → FFFFFFFF
なので最小桁数は8

Int64の場合
                               1234567890123456
    IntToHex(High(Int64),1) → 7FFFFFFFFFFFFFFF
    IntToHex(  Int64(-1),1) → FFFFFFFFFFFFFFFF
なので最小桁数は16 でそろえるのがよいでしょう。

変換は次のような動作になります。

    IntToHex(            1, 8)  →  00000001
    IntToHex(High(Integer), 8)  →  7FFFFFFF
    IntToHex(           -1, 8)  →  FFFFFFFF

    IntToHex(Int64(1)   ,16)    →  0000000000000001
    IntToHex(High(Int64),16)    →  7FFFFFFFFFFFFFFF
    IntToHex(  Int64(-1),16)    →  FFFFFFFFFFFFFFFF

1byte = 8bit 
これで表現できる数値は
2^8(8個の0/1) = 16(=2^4)^2 = 256 です。

1バイトは、2文字の16進数の文字 00 〜 FF で
表す事ができます。

Integerは符号付き32ビット整数なので
32bit = 4byte なので8つの16進数文字で表せます。

Int64は符号付き64ビット整数なので
64bit=8byteだから16つの16進数文字で表せます。



SizeOf(Integer)で、Integerのサイズが
バイト数の4として取得できます。
Int64に対しても同様。
なので

	IntToStr(High(Integer), SizeOf(Integer)*2);
	IntToStr(High(Int64), SizeOf(Int64)*2);

このように記述すると16進数として適切な文字数が桁指定されます。