конвертировать в unsigned char и unsigned short в Android - PullRequest
0 голосов
/ 18 февраля 2020

Я должен преобразовать свои байты в unsigned char и unsigned short, как это делается в iOS

latitude = (unsigned char)(bytebuffr.getchar(0)) + ((unsigned short)(bytebuffr.getchar(1)& 0xF)) << 8);

Как мне добиться этого в моем android коде. пожалуйста помогите уже попробовал это в android но не работает,

lattitude = (short) ((getUnsignedByte((byte) (bb.getChar(0) & 0xFF))) +
                    getUnsignedByte((byte) ((bb.getChar(1) & 0x0F))) << 8);

bb это bytebuffer и bb.getchar дает мне байты, которые читаются из bytebuffer

1 Ответ

3 голосов
/ 18 февраля 2020

В этом случае вам не нужно конвертировать из char в short. Поскольку bb является ByteBuffer, используйте getShort, если вы хотите прочитать два байта из буфера и использовать их как 16-разрядное число со знаком. Используйте getChar, если вам нужно прочитать два байта из буфера (не один!) И использовать их как 16-разрядное число без знака. Я подозреваю, что вы думаете, что getChar читает только один байт. Это не так. char имеет ширину 16 бит. Кроме того, char - это целочисленный тип без знака в Java. Хотя он используется для представления символов (свободно) в строках, он является целым (целым числом) типом. Целочисленные типы:

  • byte: 8-битная подпись: от -128 до 127 включительно
  • short: 16-битная подпись; От -32768 до 32767, включительно
  • char: 16-разрядный без знака: от 0 до 65535 включительно (или '\u0000' до '\uffff')
  • int: 32-разрядная подпись : От -2147483648 до 2147483647, включительно
  • long: 32-разрядная подпись: от -9223372036854775808 до 9223372036854775807 включительно

Если вам нужно преобразовать: char 16-битный тип без знака short - это подписанный 16-битный тип. Чтобы использовать те же биты в short, что и в char, вы делаете это:

short s = (short)ch;

Нет необходимости маскировать первый байт или что-то в этом роде.

...