2009-03-15 3 views
1

Я работаю над проектом, пугающим медиаплеер. Я написал генератор файлов в Java и преобразовал генератор CRC из исходного кода сжатия, написанного на C. Я могу написать данные с помощью DataOutputStream, но я не могу понять, как отправлять данные в виде массива без знака в java. В C это очень простой процесс. Я искал решение довольно тщательно, и лучшее решение, которое я нашел, - просто отправить данные на C и позволить C вернуть CRC. Я просто не могу правильно искать, так как я довольно незнакома с этим. Большое спасибо за любую помощь.Java Unsigned Char Array

+0

Почему вы выбрали порт процедуру CRC от С до Java? Это нестандартно? Я спрашиваю, потому что, возможно, будет легче найти тот, который был первоначально написан на Java, и, вероятно, он будет более оптимизирован, чем порт с другого языка. –

ответ

6

Вам определенно нужен байт []. «Байт» эквивалентен подписанному символу в C. «char» Java - это 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

Это похоже на то, что он борется с аспектом подписи, а не тем, что эквивалентно Java эквиваленту C, нет? Тем не менее, совет по шаблону бит. –

+0

Мэтт: Хотя я подозреваю, что OP борется с подписью, факт, что «байт» не появляется один раз в описании, делает довольно неясным, что они знают, что они должны использовать байтовый массив. –

0

Большинство операторов CRC используют в основном побитовые сдвиги и XOR. Они должны отлично работать на Java, который не поддерживает беззнаковые целочисленные примитивы. Если вам нужна другая арифметика для правильной работы, вы можете попробовать лить в короткий.

Смежные вопросы