2017-02-17 10 views
0

Не могу поверить, что мне сложно с этим справиться, но пока не нашли ответа: допустим, у меня есть Java char (или 1-значный String), и я хочу преобразовать его в byte ASCII. Как мне это сделать?Преобразование 8-разрядного символа ASCII в байт

Я знаю, что могу найти десятичное значение символа ASCII и создать из него байт, но похоже, что должно быть простое преобразование. Я нашел то, что, как представляется, ответ на байты массивов:

byte[] asciiArray = "SomeString".getBytes(StandardCharsets.US_ASCII); 

, но не для всего одного байта. Что-то вроде:

byte asciiA = <some conversion function>('A'); 
+1

Вы ищете '(байт) 'A''? – Kevin

+2

Java 'char' не является байтом. Это 16-разрядный Unicode и должен быть закодирован с определенным внешним представлением, таким как UTF-8. Некоторые символы «ASCII» приведут к выходу более одного байта. –

+0

Когда вы укажете 8-битное, вы действительно хотите включить расширенный ASCII (0x80-0xFF)? Если это так, невозможно преобразовать все символы в одиночные байты, так как некоторые из них могут кодироваться как 2 байта в UTF-8. Вопрос неясен. –

ответ

0

Если вы уверены, что символ в диапазоне U + 0000 до U + 007F, это будет один UTF-16 код блока (символ), а также в наборе ASCII символов, и что кодовый блок UTF-16 будет иметь то же значение, что и кодовый блок ASCII.

Возможно, вы захотите добавить охрану, потому что (байт) '½' не даст вам ничего полезного.

+1

Фактически '(byte) '½'' будет, но' (byte)' ⅓'' не будет. 0xbd поместится в байт, но 0x2153 не будет. – VGR

+1

@VGR Ах, да, это будет кодировка ISO 8859-1 для '½'. Но было бы бессмысленно называть это ASCII. –