プロが教えるわが家の防犯対策術!

BASE64で0~63以降の数を表現する方法と考え方を教えてください

http://ja.wikipedia.org/wiki/Base64 にある
0~63の数に対応する文字とデータ(0はA、63は/)の変換表がありますが
64や70、150といった数字を変換するにはどうしたらよいでしょうか?

A 回答 (4件)

ふつうの1byte文字は8bitだから256文字を表現する能力があるのに、なぜ64文字だけで変換するのか、という質問だと見ました。


BASE64でエンコードする対象データはバイナリ列なので、それをbyte区切りにする必然性はないわけです(処理速度的にはもちろんbyte区切りの方が有利ですが)。BASE64でエンコードするときには、これを6bitで区切る。すると64文字であらゆるbit列が表現できる、という原理です。
だから、「64以上の数値が出てこないように区切っているので変換表は63までで良い」が回答になります。

70というビット(asciiで言う'F')をエンコードする場合は、
70 = 64 + 4 + 2 = 0b01000110
なので、010001 と 10 という6bitずつに分け、後者はゼロビットを足して六桁にした結果の
010001 100000
を変換して、 Rg が得られる。という操作です。

注意して欲しいのは、63というビット(asciiで言う'?')をエンコードする場合でも、やはり
63 = 32 + 16 + 8 + 4 + 2 + 1 = 0b00111111
001111 110000
変換して、 Pw が得られることになる点です。

そのwikipediaのページにも書いてあるので、注意深く読み直してみてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

ですがすみません
70 = 64 + 4 + 2 = 0b01000110
からすでに理由がわからない状態です。

64+4+2=111111 000100 000001

70 = 64 + 6 = 111111 000110
のようにならないのはなぜでしょうか?

この疑問がBASE64と関係なかったらすみません

お礼日時:2010/07/18 00:38

変換表だけでなく、その直上に記されている変換形式と変換例に注目してください。


そこにあなたの疑問に対する回答があります。

例に挙げられている70をBASE64でエンコードする手順

10進表現 70
16進表現 46
2進表現 01000110

これを6bitづつに分割した結果 010001,10
6bitに満たない分に0を追加して6bitにした結果 010001,100000
変換表を参考に変換した結果 Rg
4文字に満たない分に=記号を追加して4文字にした結果 Rg==

それはさておき

> 70 = 64 + 4 + 2 = 0b01000110
> からすでに理由がわからない状態です。

これはBASE64とは直接関係ない、ただの2進⇔10進⇔16進の変換です。
恐らく錯誤されているだけかと推察しますが、もし本当に理解できないなら、
BASE64について考える前に基礎を固めることをお勧めいたします。
    • good
    • 0
この回答へのお礼

補足回答ありがとうございます。

返事を書こうにもリダイレクトがループしているとかでトップページに戻ってしまい書き込みが出来ませんでした、すみません。

どうも思い違いをしていたようです、ありがとうございました。

お礼日時:2010/07/19 02:34

「70というビット(asciiで言う'F')をエンコードする場合は」


の中の「ビット」は「バイト」の間違いです。お恥ずかしい。もう一文も同様です。
    • good
    • 0

BASE64をまったく理解していないようですね。


もとデータを6bitに分割するのだから0から63までの数以外はありえないのです。
    • good
    • 0
この回答へのお礼

そうなんです、全く理解出来てないんです…
この状態からどうゆう手順を踏んだら少しは理解できるようになると思いますか?

お礼日時:2010/07/17 22:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!