JISToSJIS

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

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

プログラム

////////////////////////////////////////////////// // 【引数】 // JIS : 16進数 // 【戻値】 // シフトJIS(16進数) ////////////////////////////////////////////////// FUNCTION JISToSJIS(JIS) DIM arr[1] DIM res[1] arr[0] = hexToDec(COPY(JIS, 1, 2)) arr[1] = hexToDec(COPY(JIS, 3, 2)) // 上位8bit arr[0] = arr[0] - $21 // 上位7bit res[0] = binToDec(COPY(decToBin(arr[0]), 1, LENGTH(decToBin(arr[0])) - 1)) res[0] = decToHex(res[0] + IIF(res[0] <= $1E, $81, $C1)) // 下位8bit SELECT COPY(hexToBin(arr[0]), LENGTH(hexToBin(arr[0]))) CASE "0" res[1] = arr[1] + $1F IFB res[1] >= $7F THEN res[1] = decToHex(res[1] + 1) ELSE res[1] = decToHex(res[1]) ENDIF CASE "1" res[1] = decToHex(arr[1] + $7E) SELEND RESULT = JOIN(res, "") FEND ////////////////////////////////////////////////// // 【引数】 // bin : 2進数 // 【戻値】 // 10進数に変換した値 ////////////////////////////////////////////////// FUNCTION binToDec(bin) dec = 0 FOR n = 1 TO LENGTH(bin) dec = dec + COPY(bin, n, 1) * POWER(2, LENGTH(bin) - n) NEXT RESULT = dec FEND ////////////////////////////////////////////////// // 【引数】 // dec : 10進数 // 【戻値】 // 2進数に変換した値 ////////////////////////////////////////////////// FUNCTION decToBin(dec) bin = "" REPEAT bin = (dec MOD 2) + bin dec = INT(dec/2) UNTIL dec = 0 RESULT = bin FEND ////////////////////////////////////////////////// // 【引数】 // dec : 10進数 // 【戻値】 // 16進数に変換した値 ////////////////////////////////////////////////// FUNCTION decToHex(dec) RESULT = FORMAT(VAL(dec), 0, -1) FEND ////////////////////////////////////////////////// // 【引数】 // hex : 16進数 // 【戻値】 // 2進数に変換した値 ////////////////////////////////////////////////// FUNCTION hexToBin(hex) HASHTBL hb hb["0"] = "0000"; hb["1"] = "0001"; hb["2"] = "0010"; hb["3"] = "0011"; hb["4"] = "0100"; hb["5"] = "0101"; hb["6"] = "0110"; hb["7"] = "0111"; hb["8"] = "1000"; hb["9"] = "1001"; hb["a"] = "1010"; hb["b"] = "1011"; hb["c"] = "1100"; hb["d"] = "1101"; hb["e"] = "1110"; hb["f"] = "1111"; bin = "" FOR n = 1 TO LENGTH(hex) str = COPY(hex, n, 1) bin = bin + hb[str] NEXT RESULT = bin 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 ////////////////////////////////////////////////// // 【引数】 // expr : 評価する式 // truepart : 評価した式がTrueのときに返す値 // falsepart : 評価した式がFalseのときに返す値 // 【戻値】 // truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき ////////////////////////////////////////////////// FUNCTION IIF(expr, truepart, falsepart) IFB EVAL(expr) THEN RESULT = truepart ELSE RESULT = falsepart ENDIF FEND