2013-05-31 9 views
0

Я работаю со звуком, я сохранил аудиоданные на коротком массиве. Я хочу преобразовать его в массив байтов для хранения wav-файла. Я не знаю, как преобразовать short [] в байт []. Вы можете мне помочь. спасибо.Как преобразовать короткий массив в массив байтов?

+3

читать это http://stackoverflow.com/questions/10804852/how-to-convert-short-array-to-byte-array – lakshman

+0

большое спасибо. Я попробую этот код: private byte [] shortArrayToByteArray (short [] shortArr) { \t \t int index; \t \t int iterations = shortArr.length; \t \t ByteBuffer bb = ByteBuffer.allocate (shortArr.length * 2); \t \t \t для (индекс = 0; индекс = итерациях;! ++) {индекс \t \t bb.putShort (shortArr [индекс]); \t \t} \t \t возвращение bb.array(); \t} – coffee

+0

Если вы используете ByteBuffer, убедитесь, что порядок байтов правильный для вашей системы. Значение по умолчанию - большой endian, но во многих форматах используется немного endian. –

ответ

0

Единственный способ создать массив байт тот же размера, что и короткий массив и скопировать короткие элементы массива

+0

Большое спасибо, я тестирую код. – coffee

2

короткое является 16 bit типа и байты 8 bit типа. Итак, из массива длиной n вы получите массив байтов 2n.

Основа

перед преобразованием массива вещи о преобразовании одного короткого замыкания на байты. поэтому в соответствии с приведенной выше строкой вы создадите 2 байта из одного короткого.

Принцип будет хранить первые 8 бит по два байта и хранить вторые 8 бит на другой короткий. Код будет как этот

byte b1, b2; 
short s; 

b1 = s & 0xff; 
b2 = (s >> 8) & 0xff; 

Теперь массив

использовать выше основной для массива в настоящее время. скажем, размер массива short равен n. пусть короткое является s

byte result[2*n]; 
for(int i = 0; i<2*n ; i=i+2){ 
    b[i] = s[i>>1] & 0xff; 
    b[i+1] = (s[i>>1 | 1] >> 8) & 0xff; 
} 

Использование ByteBuffer класса

вы также можете конвертировать короткий массив ByteArray, используя класс ByteBuffer.

ByteBuffer byteBuf = ByteBuffer.allocate(2*n); 
for(int i = 0; i<n ; i++) { 
    byteBuf.putShort(buffer[i]); 
} 
+1

Вы забыли про контенту – SomeWittyUsername

+0

И подпись. Это плохо испортит ваши данные, вы, по крайней мере, должны были использовать '>>>' –

+0

@icepack. Например, я использовал маленький endian. Основная цель вопроса - не создавать байтовый массив для него .. но дать ему понятие .. Я в порядке? – stinepike

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