2009-03-15 7 views
1

Ich arbeite an einem Projekt fuzzing einen Media Player. Ich schrieb den Dateigenerator in Java und konvertierte den CRC-Generator von dem ursprünglichen in C geschriebenen Komprimierungscode. Ich kann Daten mit DataOutputStream gut schreiben, aber ich kann nicht herausfinden, wie man die Daten als vorzeichenloses Zeichenarray in Java sendet. In C ist das ein sehr einfacher Prozess. Ich habe ziemlich gründlich nach einer Lösung gesucht, und die beste Lösung, die ich gefunden habe, besteht darin, einfach die Daten an C zu senden und C einen CRC zurückgeben zu lassen. Ich kann einfach nicht richtig suchen, da ich mit diesem Zeug ziemlich unbekannt bin. Vielen Dank für jede Hilfe.Java Unsigned Char Array

+0

Warum haben Sie in den Hafen der CRC-Mechanismus von C nach Java wählen? Ist es nicht Standard? Ich frage, weil es vielleicht einfacher ist, einen zu finden, der ursprünglich in Java geschrieben wurde, und wahrscheinlich besser optimiert sein wird als ein Port aus einer anderen Sprache. –

Antwort

6

Sie wollen auf jeden Fall ein Byte []. Ein "Byte" ist äquivalent zu einem Zeichen in C mit Zeichen. Java "char" ist ein 16-Bit-Unicode-Wert und nicht wirklich äquivalent.

Wenn es für Fuzzing ist, es sei denn, es gibt besondere etwas über die CRC-Funktion, die Sie verwenden, stelle ich mir Sie einfach verwenden:

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

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

Ich verwende definitiv zufällige Bytes für die eigentlichen Audiodaten, aber im Moment versuche ich, legitime Header zu erstellen und Punkte und so zu suchen. Danke aber, ich werde das Byte-Array definitiv versuchen. – grossmae

2

Ich bezweifle, dass Sie etwas mit Charakteren tun wollen. Ich kann nichts in Ihrer Beschreibung sehen, das Text Manipulation vorschlägt, was Sie mit Charakteren tun würden.

Sie möchten ein Byte-Array verwenden. Es ist ein wenig mühsam, dass Bytes in Java signiert sind, aber ein Byte-Array ist das, was Sie haben - arbeiten Sie einfach mit den Bitmustern, anstatt sie als tatsächliche Zahlen zu betrachten, und überprüfen Sie jede Operation sorgfältig.

+0

Es hört sich eher so an, als würde er mit dem Signedness-Aspekt kämpfen, nicht was das Java-Äquivalent zu einem C-Char ist, nein? Der Bitmuster-Hinweis ist jedoch solide. –

+0

Matt: Während ich vermute, dass die OP mit der Signedness zu kämpfen hat, macht es die Tatsache, dass "Byte" nicht einmal in der Beschreibung erscheint, ziemlich unklar, dass sie wissen, dass sie ein Byte-Array verwenden sollten. –

0

Die meisten CRC-Operatoren verwenden hauptsächlich bitweise Verschiebungen und XORs. Dies sollte für Java funktionieren, das keine Ganzzahlen ohne Vorzeichen unterstützt. Wenn Sie andere Arithmetik benötigen, um ordnungsgemäß zu arbeiten, können Sie versuchen, eine short zu werfen.