確認したいBase64整数値。 Linuxコマンドがありますが、base64
これを整数に適用する方法を理解できません。
試しましたが、base64 10
エラーメッセージが表示されます。base64: 10: No such file or directory
問題は、Base64がバイナリをテキストに変換するために使用されるため、テキストパラメータを渡す必要がないということです。したがって、私の引数は10
バイナリではなくテキスト文字列として読み込まれます。テキストパラメータをバイナリに変換する方法はありますか?
base64コマンドを使用して整数のBase64値を取得するには?
答え1
数値を 16 進数に変換し、対応するecho
バイト列を印刷してパイプするために使用されbase64
ます。したがって、base64を使用して整数10をエンコードするには、次のようにします。
echo -en '\xA' | base64
結果を説明しましょう。バイト 10 には次のバイナリ表現があります。
00001010
Base64がすることは、このデータを6ビットグループに分割することです。したがって、パディングを使用すると、次の2つの6letを取得できます。
000010 100000
10進表現は、それぞれ文字Cとgに対応する2と32です。
答え2
以下のコマンドは、10進数を64進数に変換します。 Base64 エンコード方式を使用しないが文字を数値として使用する Base64 エンコード方式の URL 安全バリアントを使用します。
awk 'NR==FNR{a[NR-1]=$0;next}{if($0==0){print"A";next}o="";for(n=$0;n!=0;n=int(n/64))o=a[n%64]o;print o}' <(printf %s\\n {A..Z} {a..z} {0..9} - _) -
次のコマンドは Bash で同じことを行います。 .Zshに変更すると、l%64
Zshでも機能しますl%64+1
。
unset a;a=({A..Z} {a..z} {0..9} - _);while IFS= read l;do if ((l==0));then echo A;continue;fi;o=;for ((;l!=0;l/=64));do o=${a[l%64]}$o;done;printf %s\\n "$o";done
これは64進数を10進数に変換します。
awk 'NR==FNR{a[$0]=NR-1;next}{o=0;for(i=NF;i>=1;i--)o+=a[$i]*64^(NF-i);print o}' FS= <(printf %s\\n {A..Z} {a..z} {0..9} - _) -
これはBashでも同じことをします。
unset a;i=0;declare -A a;for x in {A..Z} {a..z} {0..9} - _;do a[$x]=$((i++));done;while IFS= read l;do o=0;for((i=${#l};i>=1;i--));do let o+=${a[${l:i-1:1}]}*64**(${#l}-i);done;echo "$o";done
これらのawk
コマンドを使用すると、2**53+1
数値がより多く失われ、精度が大幅に失われますが、これを防ぐために4.1以降で-M
()を追加できます。--bignum
gawk
Bashコマンドは整数オーバーフロー2**63
とより大きな数を生成します。