三流君(TOP) /ASPで遊ぶ /ASP記事一覧を見る

分類: [Form関係] /DB系ADOを使い( [Mdb接続] [CSV接続] [Excel接続]) /[ASPでTextFileを操作] /[VBScript関数ほか]

CODE BASE64の変換処理のテスト(全角2バイト文字非対応)

受け取った文字列をBASE64に変換する、そんなテストプログラムを組んでみます
24ビット(8ビット*3)の2進数文字列を作成し、
そこから、6ビット単位でデータを取り出し、再び4つの数値に変換。
で、その数値を、対応表にしたがって、文字に直します。
'6ビットデータの「0〜63」を以下の文字列に変換する。
0 〜25:A〜Z
26〜51:a〜z
52〜61:0〜9
62:+
63:/
あまりは=を追加する

※詳細は、ソースと詳細解説のページを見てください。

テストデータの入力
変換したい文字列を入力してください。

↑いろいろと遊んでみてください↑
※2バイト文字(漢字)に対応してません・・・早く対応しろって???



BASE64を使用したサンプル(ソースの紹介)

詳細解説は[http:/asp/backno/asp096.html]を見てください
下記、/cgi-bin/test/test096-1.aspのソース(中身)です

BASE64 を 使った ソースコードを紹介する

表示色の説明:ASP VBScriptは <% 〜 %>
キーワードはBASE64 です。 <%@LANGUAGE=VBScript%> <html> <head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis"> <title>CODE BASE64の変換処理のテスト(全角2バイト文字非対応)</title> </head> <body> <h1>CODE BASE64の変換処理のテスト(全角2バイト文字非対応)</h1> 受け取った文字列をBASE64に変換する、そんなテストプログラムを組んでみます<br> 24ビット(8ビット*3)の2進数文字列を作成し、<br> そこから、6ビット単位でデータを取り出し、再び4つの数値に変換。<br> で、その数値を、対応表にしたがって、文字に直します。<br> '6ビットデータの「0〜63」を以下の文字列に変換する。<br> 0 〜25:A〜Z<br> 26〜51:a〜z<br> 52〜61:0〜9<br> 62:+<br> 63:/<br> あまりは=を追加する<br> <br> ※詳細は、ソースと詳細解説のページを見てください。<br> <hr> <% CHK_DATA = Request.Form("DATA") 'データを変数に保存 '長さをチェックする If Len(CHK_DATA) <> 0 Then '文字が入っていたら Response.Write "受け取ったデータは<br>" Response.Write Server.HTMLEncode(CHK_DATA) '関数を呼んで、BASE64に変換して表示する Response.Write "<br>BASE64に変換すると<br>" Response.Write BASE64TEST(CHK_DATA) & "<br>です<HR>" Else CHK_DATA = "ABCDEFG" End If %> テストデータの入力<br> <FORM ACTION="test096-1.asp" METHOD="POST"> 変換したい文字列を入力してください。<br> <INPUT TYPE="text" SIZE="24" NAME="DATA" VALUE="<%=CHK_DATA%>"> <INPUT TYPE="submit" VALUE="変換開始"><br> ↑いろいろと遊んでみてください↑ </FORM> ※2バイト文字(漢字)に対応してません・・・早く対応しろって???<br> <br> </body> </html> <% 'BASE64の変換処理にチャレンジする 全角文字未対応 Function BASE64TEST(strMOJI) Dim strWORK Dim strCODE Dim n, i Dim nAMARI Dim n6BOX(5) '6ビット取り出した数値 Dim nCODE Dim strRET strRET = "" 'リターン値を初期化する For n = 1 To Len(strMOJI) Step 3 '3バイトを2進数に変換する、24ビットの数値を作成する strWORK = "" nAMARI = 0 For i = 0 To 2 strCODE = Mid(strMOJI, n + i, 1) '文字を取り出す If strCODE = "" Then nAMARI = 3 - i strWORK = strWORK & "00000000" Exit For Else 'コードに変換する strWORK = strWORK & HEX16toSTR2(Hex(Asc(strCODE))) End If Next '8*3の24ビット2進数から6ビット単位で4つ取り出し、数値に変換する For i = 0 To 3 n6BOX(i) = CInt("&H0" & STR2toHEX16(Mid(strWORK, 1 + i * 6, 6))) Next '対応表にそって変換する '6ビットデータの「0〜63」を以下の文字列に変換する。 ' 0 〜25:A〜Z ' 26〜51:a〜z ' 52〜61:0〜9 ' 62 :+ ' 63 :/ For i = 0 To 3 - nAMARI If n6BOX(i) = 63 Then strRET = strRET & "/" If n6BOX(i) = 62 Then strRET = strRET & "+" ' 0 〜25:A〜Z If 0 <= n6BOX(i) And n6BOX(i) <= 25 Then strRET = strRET & Chr(Asc("A") + n6BOX(i) - 0) End If ' 26〜51:a〜z If 26 <= n6BOX(i) And n6BOX(i) <= 51 Then strRET = strRET & Chr(Asc("a") + n6BOX(i) - 26) End If ' 52〜61:0〜9 If 52 <= n6BOX(i) And n6BOX(i) <= 61 Then strRET = strRET & Chr(Asc("0") + n6BOX(i) - 52) End If Next 'あまりの文字分=を追加する If nAMARI = 1 Then strRET = strRET & "=" If nAMARI = 2 Then strRET = strRET & "==" Next BASE64TEST = strRET End Function 'HEX16進文字列を受け取り2進数文字列を返す Function HEX16toSTR2(strHEX) Dim n 'ループカウンタ Dim i 'ループのカウンタ Dim n8421 '8 4 2 1の数値計算用 Dim str2STR Dim nCHK str2STR = "" '結果のエリアを初期化する '文字数分ループする For n = 1 To Len(strHEX) On Error Resume Next 'エラー発生時次の行へ nCHK = 0 '0で初期化 nCHK = CInt("&h" & Mid(strHEX, n, 1)) 'n文字目を数値変換 On Error Goto 0 'エラー処理を通常に戻す n8421 = 8 '初期値に8を代入する(上からチェックしたいので) For i = 1 To 4 '4回まわるよ If (nCHK And n8421) = 0 Then 'Andでビットをチェックする str2STR = str2STR & "0" 'ビットは立ってないよ Else str2STR = str2STR & "1" 'ビットは立ってるよ End If '次のビットをチェックしたいので2で割る n8421 = n8421 / 2 Next Next 'リターン値をセットして終了 HEX16toSTR2 = str2STR End Function '2進文字列を受け取り16進文字列を返す Function STR2toHEX16(str2) Dim strHEX Dim n 'ループカウンタ Dim i 'ループのカウンタ Dim n8421 '8 4 2 1の数値計算用 Dim nBYTE '頭4文字単位かチェックする n = Len(str2) Mod 4 '足りない文字数を計算する If n <> 0 Then str2 = String(4 - n, "0") & str2 '頭に文字0を追加する End If strHEX = "" '結果のエリアを初期化する '文字数分ループする For n = 1 To Len(str2) Step 4 '4文字(1バイト)単位にループを作る n8421 = 8 '初期値に8を代入する(上から計算したいので) nBYTE = 0 '1バイト計算用変数を初期化 For i = 0 To 3 '4回まわるよ(4ビット分) 'ビットが立っているかチェックする If Mid(str2, n + i, 1) = "1" Then nBYTE = nBYTE + n8421 'ビットに対応した数値を+する End If '次のビットを計算したいので2で割る n8421 = n8421 / 2 Next '計算して、1倍との数値が完成したので16進文字にしてセットする strHEX = strHEX & Hex(nBYTE) Next 'リターン値をセットして関数を抜ける STR2toHEX16 = strHEX End Function %>

商品:服と靴関係を紹介(広告)

服と靴など →の人気

  1. (プーマ)PUMA SS Tee 507395 → 2月1日 最近販売
  2. (グラビス)GRAVIS 4 DOTS SS 260971 → 2月1日 伸び率UP
  3. (ビー・ブイ・ディ) B.V.D. BODY GEAR SPORTS ク 1月31日 最近販売
  4. (グンゼ)GUNZE 【ウルトラヒート】あたたか保温 裏起毛パイル紳士ハ 1月31日 伸び率UP
  5. (アディダス)adidas adienergy ウィンドジャケット SS 1月30日 最近販売
  6. 無地裏起毛シャギーラウンドネック長袖スウェット 上下セット → 1月30日 伸び率UP
  7. (コリスコ)corisco ツイルフードインスタンドブルゾン 67191 1月29日 最近販売
  8. (ディーゼル)DIESEL 25-UFL-OXIM KNICKERS U 1月29日 伸び率UP

続き(一覧)を見る


Googleで関連項目を検索する

[キーワード:BASE64] と サンプル|解説|Dim|Set で検索
↓で検索して他のページも確認してみてください。

Google

あれ?私のページが検索に載ってない(笑)一度お試しを(私のページに、また戻ってきてね(爆))



[Topへ戻る] −−>[ASP系のTOPへ戻る] −−>[記事一覧を見る]

リンク 三流君 ASP系 の 解説を項目ごとにまとめてみました

まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。

次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません

DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く

VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。

その他:blogや広告↓
[日記的なblog]← あまり更新してないけど・・・
[三流なプログラムコード]← 恥ずかしいのであまり載せてないけど・・・
[通販商品の足跡を紹介] ←通販商品などを紹介してます




現在時刻は、2012/02/10 3:50:51です。