人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

あるバイナリ文字列があったとします

これを,ASCII の,case-insentive(大文字小文字を区別しない)だけで表すのに,どういった方法が考えられるでしょうか

よくバイナリの表現に使われる,MIME/Base64 は,case-inseintive ではないので使えません

base32,punycode(文字列以外で使えるかわからない),UTF-5(使えるのか?)などがあると思います

試しに base32 で実装してみたら,文字列がかなり長くなってしまう,という問題がありました

●質問者: goodvn
●カテゴリ:コンピュータ インターネット
✍キーワード:ASCII base64 CASE MIME punycode
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● zzz_1980
●26ポイント

ここは基本にたちもどって、uuencode。

http://seclan.dll.jp/ccuubq.htm

◎質問者からの返答

ありがとうございます

要件を書き忘れたのですが,使える文字列は,[a-z0-9]のみとなるため,uuencode は使えません


2 ● rev-9
●78ポイント ベストアンサー

>使える文字列は,[a-z0-9]のみ

とすると36通りの文字しか使えないことになりますので、一桁で表せる情報量は最大でも\log {}_2 36≒5.17ビットです。base32では5ビット、したがって表すバイナリ列に統計的な偏りなどが存在しなければ、何をどう工夫してもbase32で表した場合の5/5.17≒0.97倍より短くはできません。base32表記をかなり長いとされるのであれば、情報論的にご要望を満たすことは不可能かと思います。

◎質問者からの返答

ありがとうございます

直感的に考えても,base32 は使える文字列をほぼ全て使ってしまっていますものね...

他のところで工夫してみます


3 ● q11
●32ポイント

binhexとかだとバイト数が増えるので嬉しくないですよね。

古いのだとs9フォーマットとかあるけどこれも16進数に変換なので倍以上に増えますね。

ちょっとおぼろな記憶ですが、ishフォーマットで特定のスイッチを指定するとアルファベットだけ使ってくれたような記憶があります。

http://www.vector.co.jp/vpack/browse/person/an000019.html

↑こちらにソースもあるので参考になるんではないかと思います。

昔、ASCII文字しか送れないパソコン通信の時代にバイナリを送るためのエンコードかつデータ圧縮と訂正フォーマットが色々あったのでその頃のフォーマットでishファイルは一世を風靡していました。


http://homepage1.nifty.com/glass/tom_neko/web/web_03.html

◎質問者からの返答

ありがとうございます

ish も検討しましたが,base32 に比べた場合に,サイズは小さくならないようだったので,検証はパスしました


4 ● hamazo_special
●10ポイント

単純ですが、単に各バイトを2文字の16進数で表現するようにしてはだめですか?

変換後は元の文字列の倍の長さになります。

◎質問者からの返答

binhex のことをおっしゃってますでしょうか?

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ