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進数として適切な文字数が桁指定されます。
|