Function SJIStoJIS(strSJISCODE As String) As String
Dim hi As Long
Dim lo As Long
'シフトJISコードの上位バイトを hi、下位バイトを lo とします。
hi = Val("&h" & Mid(strSJISCODE, 1, 2))
lo = Val("&h" & Mid(strSJISCODE, 3, 2))
'hi が 0x9f 以下の場合、 hi から 0x71 減じます。
'そうでない場合、 hi から 0xB1 減じます。
hi = hi - IIf(hi <= &H9F, &H71, &HB1)
'hi に 2 を乗じて、さらに 1 を加えます。
hi = hi * 2 + 1
'lo が 0x7F より大きい場合、 lo から 1 減じます。
If lo > &H7F Then lo = lo - 1
'lo が 0x9E 以上の場合、lo から 0x7D 減じて、hi に 1 加えます。
If lo >= &H9E Then
lo = lo - &H7D
hi = hi + 1
Else 'そうでない場合、 lo から 0x1F 減じます。
lo = lo - &H1F
End If
'結果を返します
SJIStoJIS = Right("0" & Hex(hi), 2) & Right("0" & Hex(lo), 2)
End Function
まぁ、VBScriptでも、普通に動くだろ、
変数やりターン値の AS XXXXX の型指定が出来ないから、それは取って
組み込み実行すると。
Microsoft VBScript 実行時エラー エラー '800a000d'
型が一致しません。: 'Val'
/cgi-bin/test/test061-1.asp, 行 61
オイオイ、Val関数って使えないのかよ。
※いつも思うけど、
型が一致しないとメッセージでるから、送り側の変数が悪いのか?
と見当違いのデバックしてたよ。
型が一致しません。じゃなくて、関数が見つかりませんのほうがいいのにね。
'シフトJISコードの上位バイトを hi、下位バイトを lo とします。
hi = Clng("&h" & Mid(strSJISCODE, 1, 2))
lo = Clng("&h" & Mid(strSJISCODE, 3, 2))
と
Clng関数を使用に変更しました。
えっ、まだダメなの?
Microsoft VBScript 実行時エラー エラー '800a000d'
型が一致しません。: 'IIf'
/cgi-bin/test/test061-1.asp, 行 66
あらら、IIfもVBScriptは無いんだぁ。
一行で書いてる処理をバラすか。
If hi <= &H9F Then
hi = hi - &H71 'hi が 0x9f 以下の場合、 hi から 0x71 減じます。
Else
hi = hi - &HB1 'そうでない場合、 hi から 0xB1 減じます。
End If
と
普通に書きました(笑)
Function SJIStoJIS(strSJISCODE)
Dim hi
Dim lo
'シフトJISコードの上位バイトを hi、下位バイトを lo とします。
hi = Clng("&h" & Mid(strSJISCODE, 1, 2))
lo = Clng("&h" & Mid(strSJISCODE, 3, 2))
If hi <= &H9F Then
hi = hi - &H71 'hi が 0x9f 以下の場合、 hi から 0x71 減じます。
Else
hi = hi - &HB1 'そうでない場合、 hi から 0xB1 減じます。
End If
'hi に 2 を乗じて、さらに 1 を加えます。
hi = hi * 2 + 1
'lo が 0x7F より大きい場合、 lo から 1 減じます。
If lo > &H7F Then lo = lo - 1
'lo が 0x9E 以上の場合、lo から 0x7D 減じて、hi に 1 加えます。
If lo >= &H9E Then
lo = lo - &H7D
hi = hi + 1
Else 'そうでない場合、 lo から 0x1F 減じます。
lo = lo - &H1F
End If
'結果を返します
SJIStoJIS = Right("0" & Hex(hi), 2) & Right("0" & Hex(lo), 2)
End Function
'文字列を受け取り、バイト数を返す
Function Byte_Count(strMOJI)
bcnt = 0
'文字数分ループして、コードを表示
For n = 1 To Len(strMOJI)
nCODE = Asc(Mid(strMOJI, n, 1)) 'n番目の文字コードを求める
If (nCODE And &HFF00) = 0 Then 'コードは1バイトか? *asp055
bcnt = bcnt + 1
Else
bcnt = bcnt + 2
End If
Next
'リターン値をセットする
Byte_Count = bcnt
End Function