- ベストアンサー
BASE64で0~63以降の数を表現する方法と考え方を教えてください
BASE64で0~63以降の数を表現する方法と考え方を教えてください http://ja.wikipedia.org/wiki/Base64 にある 0~63の数に対応する文字とデータ(0はA、63は/)の変換表がありますが 64や70、150といった数字を変換するにはどうしたらよいでしょうか?
- みんなの回答 (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のページにも書いてあるので、注意深く読み直してみてください。
その他の回答 (3)
- krisc
- ベストアンサー率57% (12/21)
変換表だけでなく、その直上に記されている変換形式と変換例に注目してください。 そこにあなたの疑問に対する回答があります。 例に挙げられている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について考える前に基礎を固めることをお勧めいたします。
お礼
補足回答ありがとうございます。 返事を書こうにもリダイレクトがループしているとかでトップページに戻ってしまい書き込みが出来ませんでした、すみません。 どうも思い違いをしていたようです、ありがとうございました。
- beefisdead
- ベストアンサー率63% (92/145)
「70というビット(asciiで言う'F')をエンコードする場合は」 の中の「ビット」は「バイト」の間違いです。お恥ずかしい。もう一文も同様です。
- f272
- ベストアンサー率46% (8469/18132)
BASE64をまったく理解していないようですね。 もとデータを6bitに分割するのだから0から63までの数以外はありえないのです。
お礼
そうなんです、全く理解出来てないんです… この状態からどうゆう手順を踏んだら少しは理解できるようになると思いますか?
お礼
回答ありがとうございます。 ですがすみません 70 = 64 + 4 + 2 = 0b01000110 からすでに理由がわからない状態です。 64+4+2=111111 000100 000001 や 70 = 64 + 6 = 111111 000110 のようにならないのはなぜでしょうか? この疑問がBASE64と関係なかったらすみません