16進数を10進数に変換します。10進数を16進数に変換するにはdecToHex関数を使います。
- 構文
- Double = hexToDex( hex )
- 引数
- hex
- 16進数
- 戻値
- 10進数に変換した値
プログラム
//////////////////////////////////////////////////
// 【引数】
// hex : 16進数
// 【戻値】
// 10進数に変換した値
//////////////////////////////////////////////////
FUNCTION hexToDec(hex)
dec = 0
hex = STRCONV(hex, SC_LOWERCASE)
FOR n = 1 TO LENGTH(hex)
str = COPY(hex, n, 1)
IFB CHKNUM(str) THEN
num = str
ELSE
num = ASC(str) - 87
ENDIF
dec = dec + (num * POWER(16, LENGTH(hex) - n))
NEXT
RESULT = dec
FEND
解説
- 2行目
10進数に変換した値を代入する変数dec。dec = 0
- 3行目
hexの値を小文字に変換する。hex = STRCONV(hex, SC_LOWERCASE)
- 4行目
n=1からhexの文字数だけ繰り返す。FOR n = 1 TO LENGTH(hex)
- 5行目
hexのn番目の文字を取り出してstrに代入。str = COPY(hex, n, 1)
- 6-10行目
strが数値ならばnumにstrを代入、数値でなければstrをASCIIコードに変換して87引いた値をnumに代入。ASCIIコードに変換する必要はないが、a→10、b→11、…、f→15に変換する方法を簡潔に書きたかったので。IFB CHKNUM(str) THEN num = str ELSE num = ASC(str) - 87 ENDIF
- 11行目
numに桁の重み(16の○乗)を掛けて、decに加算。dec = dec + (num * POWER(16, LENGTH(hex) - n))
- 13行目
decを戻値として返す。RESULT = dec