2011-12-16 6 views
1

Я разрабатываю программное обеспечение на Android. В определенной части программного обеспечения мне нужно преобразовать short в байт и переконвертировать его в короткий. Я пробовал код ниже, но значения не совпадают после преобразования.short to byte and byte to short conversion in Android

short n, n1; 
    byte b1, b2; 
    n = 1200; 
    // short to bytes conversion 
    b1 = (byte)(n & 0x00ff); 
    b2 = (byte)((n >> 8) & 0x00ff); 

    // bytes to short conversion 
    short n1 = (short)((short)(b1) | (short)(b2 << 8)); 

после выполнения значений кода n и n1 не совпадают. Зачем?

+0

Дубликата http://stackoverflow.com/questions/2188660/convert-short-to-byte-in-java – GETah

ответ

5

Я не получил решение Grahams для работы. Это, однако сделать работа:

n1 = (short)((b1 & 0xFF) | b2<<8); 
+1

спасибо, что это сработало – Riskhan

1

Вы можете использовать ByteBuffer:

final ByteBuffer buf = ByteBuffer.allocate(2); 
buf.put(shortValue); 
buf.position(0); 

// Read back bytes 
final byte b1 = buf.get(); 
final byte b2 = buf.get(); 

// Put them back... 
buf.position(0); 
buf.put(b1); 
buf.put(b2); 

// ... Read back a short 
buf.position(0); 
final short newShort = buf.getShort(); 

редактирования: использование фиксированного API. Гах.

+0

Это абсолютное излишество, вопрос в OP может быть решен просто используя побитовые операторы, как показано в ответе @ Jave –

+0

За исключением этого решения не заботятся о контенте! – fge

+0

Это не плохое решение как таковое. Если вы хотели сохранить большое количество значений или преобразовать массив шорт в байты, а затем обратно, это, безусловно, стоит рассмотреть. Простейший случай - преобразование одного короткого/двух байтов в соответствии с запросом предпочтительно выполняется без выделения буфера. – Jave