0

私は今、ハフマン符号化を行っていますが、道路でこのバンプに出くわしました。私はほとんどすべてを完了しましたが、これは 1 つの部分です。私の現在の主な問題は、コードを使用してエンコードされた 0 と 1 のバイナリ文字列を格納する方法がわからないことです。普通に書き出すだけですが、エンコードした元のテキストファイルよりもファイルサイズが大きくなってしまいます。これが起こらないように、バイナリ文字列をどのように保存する必要があるかについて、誰かが私にアイデアを与えることができますか?

更新 char にキャストしようとすると、多くの char が認識されず、最終的に ?s として出力されることに気付きました。

String u = scanner.nextLine();
    char l;
    for(int b = 0;b<u.length();b++)
    {
    l = u.charAt(b);
    int c = (int) u.charAt(b);
    String p = Integer.toBinaryString(c);

    if(b!= u.length()-1)
    {
    while(p.length()!=8){
        p = "0" + p;
    //Thread.sleep(3000);
    }
    }System.out.println(p);
    k.append(p);

それは?00111111を印刷してください。これを修正する方法について誰か提案がありますか?

4

1 に答える 1

2

バイナリ文字列を保存しているときは、String. それらをより効率的に格納する 1 つの方法は、バイナリ文字列を整数に変換し、これらを使用して文字列を ASCII 文字として格納することです。

  1. 文字列をそれぞれ 8 文字 (1 バイト = 8 ビット) の短い断片に切り分けます。
  2. Integer.parseInt(piece, 2);バイナリピースをに変換するために使用しますint
  3. 次に、整数をにキャストしますchar
  4. バイナリ文字列のすべての部分に対してこれを繰り返します。

次に、 を文字列に結合しchars、結果をプレーン テキスト ファイルとして保存します。これにより、以前のバイナリ文字列ファイルの 8 分の 1 のファイルになります。

[編集] これは、さまざまな状況下でテストされたコードの動作とデコードです。 http://pastebin.com/Tq3nKX8A ご自由にお使いください。

于 2013-04-28T17:11:37.267 に答える