2009-03-15 2 views
1

私はメディアプレーヤーのファジープロジェクトに取り組んでいます。私はJavaでファイルジェネレータを書いて、Cで書かれた元の圧縮コードからCRCジェネレータを変換しました。私はDataOutputStreamでデータを正常に書き込むことができますが、データをjavaの符号なし文字配列として送信する方法はわかりません。 Cでは、これは非常に簡単なプロセスです。私は解決策をかなり徹底的に探しました。私が見つけた最良の解決策は、データをCに送信し、CにCRCを返させることです。私はちょうど私がこのようなものにかなり慣れていないので、正しく検索していないかもしれません。助けてくれてどうもありがとう。Javaの符号なしの文字配列

+0

なぜあなたはCからJavaへのポートにCRCルーチンを選んだのですか?それは非標準ですか?私はおそらくJavaで書かれたものを見つける方が簡単かもしれないし、他の言語のポートよりも最適化されているかもしれないからです。 –

答えて

6

あなたは間違いなくバイト[]が必要です。 'バイト'はCの符号付き文字に相当します。Javaの「char」は16ビットのUnicode値であり、まったく同等ではありません。

使用しているCRC機能について特別な何かがありますしない限り、それは、ファジングのためなら、私はあなたが簡単に使用することができます想像:

import java.util.Random; 
Random randgen = new Random(); 

byte[] fuzzbytes = new byte[numbytes]; 
randgen.nextBytes(fuzzbytes); 
outstream.write(fuzzbytes, 0, numbytes); 
+0

私は間違いなく実際のオーディオデータにランダムなバイトを使用していますが、今は正当なヘッダーを作成してポイントなどを探しています。ありがとう、私は間違いなくバイト配列を試してみます。 – grossmae

2

文字で何かしたいとは思っていません。私はあなたの説明で何かを見ることができません。それはのテキストの操作を示唆しています。

バイト配列を使用します。 Javaでバイトが署名されているのは苦痛ですが、バイト配列はあなたが持っているものです。ビットパターンを実際の数字と考えるのではなく、慎重にチェックしてください。

+0

彼はsignednessの面で苦労しているように聞こえますが、JavaのC charと同等のものはありません。ビットパターンのアドバイスは、しかし、固体です。 –

+0

Matt:私はOPが苦闘していると思っていますが、 "byte"が記述に一度も現れないという事実は、バイト配列を使用すべきであることがわかっていることをかなり不明瞭にしています。 –

0

ほとんどのCRC演算子は、主にビット単位のシフトとXORを使用します。これらは、符号なし整数プリミティブをサポートしていないJavaで正常に動作するはずです。他の算術演算が適切に機能するようにするには、と短くにキャストしてみてください。

関連する問題