2015-10-27 5 views
0

Я пытаюсь преобразовать int (максимум 65535) в массив из двух байтов. В C я использовал uint16, но Java не знает никаких значений без знака.Int to byte array - byte shifting

Чтобы преобразовать байты в массив я пытался использовать это:

byte[] data = { (byte) ((num >> 8) & 0xff), (byte) (num & 0xff) }; 

Но я только получаю: [63, -49] вместо: [63, 207], если я использую 16335 в качестве значения , Есть ли способ сделать это на Java?

мне нужен этот байт без знака в виде массива байтов, чтобы отправить его с помощью OutputStream

+3

байты подписаны в java ... (so -49 ~ = 207) – njzk2

+0

Спасибо, что является лучшим способом конвертировать его в unsigned? Должен ли я просто вычислить 256-49 для второго значения? – ForJ9

+3

Это правильные байты. Вопрос заключается в том, используете ли вы их в любом контексте, где знак является проблемой, и если да, то что вы ожидаете от него вместо -49, учитывая, что 207 не является допустимым значением для байта в Java. В Java нет целых чисел без знака, хотя вы можете делать неподписанные операции с использованием целых чисел/shorts/bytes в определенных случаях. – RealSkeptic

ответ

0

Вы можете использовать Java-NiO в ByteBuffer с целью:

byte[] bytes = ByteBuffer.allocate(4).putInt(1695609641).array(); 

for (byte b : bytes) { 
    System.out.println(Byte.toUnsignedInt(b)); 
} 

Надежда теперь будет работать;)

+0

Нет, я не могу, потому что он дает тот же подписанный результат. Мне нужно значение без знака (например, 207) – ForJ9

+0

Я отредактировал ответ. Pl проверить сейчас –