このソースの処理内容が分かりません。
ご教授をお願いします。
lang
1 _ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 2_ALPHA.charAt( 数値 >> 18 )
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
おそらくですが、文字の配置を考えると、base64へのエンコードでしょう。
Base64はバイナリをASCIIでエンコードするための方法で、その名の通り64進法で数え、バイナリ3バイト(24ビット)をASCII4文字に置き換えます。
そのサイクルが24ビットなので、18ビットずらして上位6ビットを対応する文字に変換している、ということでしょう。
投稿2015/03/24 04:18
総合スコア145183
0
ベストアンサー
数値を右方向に18ケタシフトして文字を取るものです。
これBase64変換ですよね?
たとえば、
lang
1_ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 2_ALPHA.charAt( 0b000000000001000010000011 >> 18 )
これは、0b000000000001000010000011 を18ケタシフトすると 0b000000 つまり0になりますのでAが返ってきます。同じように6の倍数でシフトさせていけば4つの文字が取り出せて ABCD になるはずです。
投稿2015/03/24 04:34
総合スコア36089
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
262144 >> 18
これがようやく1になりますので、これが「B」に相当します。
おそらく、何らかの事前処理部分で_ALPHAの64文字を表現する6bitが準備されており、
それに18bit下位bitに足し込むことで24bitの切りの良いバイナリ表現にしているのだと思われます。
エンコーダでよく使われるテクニックですね。
lang
1parseInt("100000000000000000", 2) // 131072 2parseInt("100000000000000000", 2) >> 18 // 0 3parseInt("1000000000000000000", 2) // 262144 4parseInt("1000000000000000000", 2) >> 18 // 1 5parseInt("10000000000000000000", 2) // 524288 6parseInt("10000000000000000000", 2) >> 18 // 2 7parseInt("11000000000000000000", 2) >> 18 // 3 8parseInt("11000000000000000000", 2) // 786432
ご覧の通り、10進数表現で見てみても、何の意味もありませんね。
投稿2015/03/24 04:13
編集2015/03/24 04:15総合スコア51
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
charAtという関数は文字列から任意の一文字を抜き出す関数です。
String.prototype.charAt() Mozilla Developer Network
そしてこのコードはおそらく「ビット演算」というテクニックを使っているコードだと思われます。
Javascript ビット演算 Wikibooks
このコードの動きを詳細に理解するためには2進数などの知識が必要に思われます。
かくいう私の環境(Windows7 Forefox 36.0.4)では同じコードをコンソール上で1,100,1024の数値をいれた限りでは"A"しか返ってこなかったので、どなたか補足していただけると幸いです。
投稿2015/03/24 03:45
総合スコア2244
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/03/24 04:44
2015/03/24 04:50