Я знаю Java byte
диапазон от -128 до 127, но C ++ BYTE
это unsigned char
(От 0 до 255.)
Я хочу преобразовать функцию C ++ в Java, а в C ++ у меня есть LPBYTE
(который является указателем на BYTE
массив.) Я пытался использовать byte
массив вместо LPBYTE
в функции C ++, но моя функция Java все еще не работает правильно.
Моя функция C ++ работает с BMP-файлом, и ее алгоритм настроен на кодирование длины серии. При преобразовании его в Java я использую BufferedImage
и получать его содержимое как byte[]
, Я предполагаю, что функция Java не работает правильно из-за несоответствия типов.
Какой тип я должен использовать в Java?
В Java вы можете использовать простой byte
и преобразовать в int
как требуется с b & 0xFF
Проблема в том, что Java не поддерживает указатели и вы не можете передать указатель на байты в Java. Ближайший эквивалент byte[]
,
Если вы выполняете только кодирование RLE, фактическое значение байтов не имеет значения, поэтому не имеет значения, подписаны они или нет. Если вы декодируете файл BMP, вы можете использовать маску, как указано выше, как требуется.
При чтении / записи в байтовый массив распространенным решением является использование ByteBuffer. Это поддерживает написание более длинных типов, таких как short
или же int
в порядке с прямым или прямым порядком байтов, и вам не нужно заранее знать точную длину.
У Java нет беззнаковых типов (кроме char
что составляет 16 бит). Так что у вас нет выбора, выбирайте byte
но переписать свой код, чтобы он работал со знаком целых чисел. Если вам нужна помощь с этим опубликовать код.
В Java нет неподписанного типа байтов. Вы могли бы использовать short
вместо. Это может представлять все значения от 0 до 255 и более.