hexToDec

16進数を10進数に変換します。10進数を16進数に変換するにはdecToHex関数を使います。

構文
  1. 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

解説

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