BASE64で0~63以降の数を表現する方法と考え方を教えてください
http://ja.wikipedia.org/wiki/Base64 にある
0~63の数に対応する文字とデータ(0はA、63は/)の変換表がありますが
64や70、150といった数字を変換するにはどうしたらよいでしょうか?
No.2ベストアンサー
- 回答日時:
ふつうの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のページにも書いてあるので、注意深く読み直してみてください。
回答ありがとうございます。
ですがすみません
70 = 64 + 4 + 2 = 0b01000110
からすでに理由がわからない状態です。
64+4+2=111111 000100 000001
や
70 = 64 + 6 = 111111 000110
のようにならないのはなぜでしょうか?
この疑問がBASE64と関係なかったらすみません
No.4
- 回答日時:
変換表だけでなく、その直上に記されている変換形式と変換例に注目してください。
そこにあなたの疑問に対する回答があります。
例に挙げられている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について考える前に基礎を固めることをお勧めいたします。
補足回答ありがとうございます。
返事を書こうにもリダイレクトがループしているとかでトップページに戻ってしまい書き込みが出来ませんでした、すみません。
どうも思い違いをしていたようです、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【Excel関数】特定の文字を別表のリストの文字に変換したい 4 2022/10/09 15:36
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Excel(エクセル) Excelで校閲をする方法はあるでしょうか(取扱説明書への掲載禁止用語の確認) 3 2022/06/11 22:51
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- Excel(エクセル) エクセル文字列の日付を日付けに変える 2 2023/05/13 11:08
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/03/09 10:07
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/01/10 09:15
- Word(ワード) Wordで1行の文字数を数値設定 2 2023/04/03 21:57
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
ExcelVBA実行後に時々落ちる
-
S-JIS → JIS コード変換するには
-
「彡」って文字はなんという文...
-
std::stringからLPCWSTR型への変換
-
CASLⅡ 文字データから数値デー...
-
PL/SQLでSJISの文字コードを取...
-
VS 2008(VB.NET)
-
%fと%gについて
-
RubyでCSV.read()で二次元配列...
-
VBScript ASC関数:文字エンコ...
-
XMLデータの中の改行コードにつ...
-
ふりがなをアルファベット化す...
-
VB6.0のコードエディタでの改行...
-
VBAで4桁の16進数から16桁の2進...
-
1をA、2をB・・・に変換したい
-
バイナリデータ→ASCII 変換プ...
-
2バイト文字をJEFからSJISに変...
-
Perlコードを、自動的にPHPコー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EBCDIC⇒SJIS変換の方法
-
セル内の文字列が日本語か英語...
-
「彡」って文字はなんという文...
-
std::stringからLPCWSTR型への変換
-
ExcelVBA実行後に時々落ちる
-
sedで日本語の置換方法について
-
COBOLによる全角・半角混...
-
ふりがなをアルファベット化す...
-
英数字を含む文字列(0-9,A-Z)...
-
VS 2008(VB.NET)
-
Symfowareでのデータ型変換につ...
-
S-JIS → JIS コード変換するには
-
CString ←→ BSTRの変換について
-
数字5桁文字コード?
-
10進数→2進数への変換
-
2バイト文字をJEFからSJISに変...
-
JIS → S-JIS コード変換するには
-
EBCDICへの変換
-
RubyでUTF8のコード値を文字に...
-
latin-1 (ISO-8859-1)への変換
おすすめ情報