Жизнь без байта без знака в Java - PullRequest
0 голосов
/ 27 апреля 2019

Мне нужно записать набор байтов в сокет TCP:

byte[] b = {0x40,0x88,0xFF};
socket.getOutputStream().write( b ) ;

Но в Java нет ни одного неподписанного байта и ошибок инициализации byte [].Как записать мои 3 байта в сокет в Java?

1 Ответ

1 голос
/ 27 апреля 2019

Подпись - это просто концепция.Под капотом byte s, подписанные или нет, всего 8 бит.Под 0xFF вы, вероятно, подразумеваете биты 1111 1111. Что такое 1111 1111 при интерпретации в дополнении к двум?-1!

Таким образом, вы должны заменить 0xFF на -1.

Аналогично, 0x88 равно 1000 1000 или -120 в дополнении до двух.

ТакВы можете написать свой байтовый массив следующим образом:

byte[] b = {0x40,-120,-1};

На самом деле, приведение к byte делает это преобразование за вас:

byte[] b = {0x40,(byte)0x88,(byte)0xFF};
...