シフト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
この記事は役に立ちましたか?