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

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バイト文字(漢字)に対応してません・・・早く対応しろって???


コーヒーブレイク たまには寄り道、休憩も(↓広告です):
広告:[2009年度カレンダー] ← 人気のカレンダーを紹介
[カレンダー商品一覧] ← そろそろ来年の準備

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. [4774136158]- Trac入門 ――ソフトウェア開発・プロジェクト管理活用ガイド
  2. [4822280535]- デッドライン―ソフト開発を成功に導く101の法則
  3. [4274501590]- ソフトウェア改良開発見積りガイドブック―既存システムがある場合の開発 (SEC BOOKS)
  4. [4894714418]- ソフトウェア職人気質―人を育て、システム開発を成功へと導くための重要キーワード (Professional Computing Series)
  5. [4798116424]- システムアーキテクチャ構築の原理 ITアーキテクトが持つべき3つの思考 (IT Architects’Archive ソフトウェア開発の実践)
  6. [4798110477]- 組込みソフトウェア開発のための構造化モデリング 要求定義/分析/設計からソースコード作成までソフトウェア開発上流工程の基本を構造化手法に学ぶ

※Ken3への連絡先 → [メール@アドレス]です。気軽に問い合わせてください

Googleで関連項目を検索する

LANGUAGE=VBScript + [キーワード:BASE64] Sub|Function プログラム|プログラミング
↓で検索するとプログラムの例 Sub/Function でまとまったHP

Google

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

三流解説とリンクページを紹介

ASP系の解説を項目ごとにまとめてみました

[ASP Form等を使用したデータのやり取り]
[ASP その他処理サンプル]
[ASP テキストファイル処理]
[ASP VBScript関数関係の説明]
[ASP ADOでMdbファイルを使う]
[ASP ADOでExcelと接続してみた]

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


現在時刻は、2009/01/06 18:57:48です。
[Topへ戻る] −−>[ASP系へ戻る] −−>[バックナンバーを見る]