SJISToJIS

シフトJISコードをJISコードに変換します。

構文
SJISToJIS( SJIS )
引数
SJIS
シフトJIS(16進数)
戻値
JIS(16進数)

プログラム

//////////////////////////////////////////////////
// 【引数】
//   SJIS : シフトJIS(16進数) 
// 【戻値】
//   JIS(16進数) 
//////////////////////////////////////////////////
FUNCTION SJISToJIS(SJIS)
	DIM arr[1]
	DIM res[1]
	arr[0] = hexToDec(COPY(SJIS, 1, 2))
	arr[1] = hexToDec(COPY(SJIS, 3, 2))
	IFB arr[0] <= $9F THEN
		arr[0] = arr[0] - $71
	ELSE
		arr[0] = arr[0] - $B1
	ENDIF
	arr[0] = arr[0] * 2 + 1
	IF arr[1] >= $7F THEN arr[1] = arr[1] - 1
	IFB arr[1] >= $9E THEN
		arr[1] = arr[1] - $7D
		arr[0] = arr[0] + 1
	ELSE
		arr[1] = arr[1] - $1F
	ENDIF
	res[0] = COPY("0" + decToHex(arr[0]), LENGTH("0" + decToHex(arr[0])) - 1)
	res[1] = COPY("0" + decToHex(arr[1]), LENGTH("0" + decToHex(arr[1])) - 1)
	RESULT = JOIN(res, "")
FEND

//////////////////////////////////////////////////
// 【引数】
//   dec : 10進数 
// 【戻値】
//   16進数に変換した値 
//////////////////////////////////////////////////
FUNCTION decToHex(dec)
	RESULT = FORMAT(VAL(dec), 0, -1)
FEND

//////////////////////////////////////////////////
// 【引数】
//   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