Шестнадцатеричный более 7F в строку в Java

Мне нужно добавить некоторые шестнадцатеричные символы к моей строке. Я пытаюсь это:

content += Character.toString((char) Integer.parseInt(Integer.toHexString(originalSize).toString(), 16));

И это работает, но когда originalSize превышает 127 (7F в шестнадцатеричном формате), он возвращает мне два шестнадцатеричных значения.

Например, делая это:

content += Character.toString((char) Integer.parseInt(Integer.toHexString(176).toString(), 16));

Результат: (content hex numbers) C0 B0

B0 — это 176 в шестнадцатеричном формате, но я не знаю, как удалить C0. Любые предложения, пожалуйста? Спасибо!

ИЗМЕНИТЬ:

Я хочу отправить строку на устройство через Bluetooth Low Energy. У меня есть такая строка:

"АБКАБК". В шестнадцатеричном виде это 41 42 43 41 42 43.

Теперь я хочу добавить формат этой строки (потому что устройство ее ждет), поэтому я добавляю ее в конец: 41 42 43 41 42 43 7E 06 02, где:

  • 7E: начало формата
  • 06: количество символов
  • 02: специальный формат, заданный производителем.

У меня есть основная строка, и я добавляю эти три шестнадцатеричных символа вручную.

РЕШЕНИЕ:

Основываясь на ответе Devon_C_Miller, я нашел собственное решение:

contentFormated = new byte[originalSize+3];

for(int i=0;i<originalSize;i++){
    contentFormated[i] = content.getBytes()[i];
}

contentFormated[originalSize] = 0x7E;
contentFormated[originalSize+1] = (byte) 0xB0;
contentFormated[originalSize+2] = 0x02;

person Fran Verona    schedule 21.04.2012    source источник
comment
Мне нужно добавить некоторые шестнадцатеричные символы к моей строке. Похоже, ты сразу плохо начинаешь. Что точно вы подразумеваете под шестнадцатеричными символами? Я предполагаю, что вы имеете в виду, что у вас есть бинарные данные, которые представляют текст в определенной кодировке. Какая кодировка? Насколько вы знакомы с кодировками?   -  person Jon Skeet    schedule 21.04.2012
comment
@JonSkeet Позвольте мне уточнить мой вопрос :)   -  person Fran Verona    schedule 21.04.2012
comment
Похоже, вы хотите работать с двоичными данными. Почему тогда вы используете строку? Помните, что в Java строки имеют кодировку Unicode, поэтому символы не соответствуют байтам.   -  person Niklas B.    schedule 21.04.2012
comment
@FranVerona: было бы полезно сделать это с полным кодом. Результат добавления к строке — это строка, а не шестнадцатеричные числа содержимого (что может означать одно из нескольких).   -  person Jon Skeet    schedule 21.04.2012
comment
Я отредактировал свой вопрос. Мне просто нужно добавить несколько шестнадцатеричных символов в конец строки, поэтому я перехожу к шестнадцатеричному, добавляю то, что хочу, и возвращаю новую строку.   -  person Fran Verona    schedule 21.04.2012


Ответы (3)


Похоже, вам нужен массив байтов, а не строка:

byte[] content = {0x42, 0x43, 0x41, 0x42, 0x43, 0x7E, 0x06, 0x02};
person Devon_C_Miller    schedule 21.04.2012
comment
Проблема, когда я пытаюсь добавить в массив размеры больше 127 (т.е. 0xB0). - person Fran Verona; 21.04.2012
comment
Решено! Спасибо за Ваш ответ :) - person Fran Verona; 21.04.2012

Здесь можно забыть о шестнадцатеричной системе счисления, так как преобразование туда и обратно.

Если вы действительно имеете в виду символ 0xB0 (шестнадцатеричный) или в другой нотации 176 десятичных знаков, вы должны сделать это так:

int c = 176;
content += Character.toChars(c);

Поскольку строка закодирована с помощью Unicode, это может привести к другим байтам. Как сказано в комментариях, если вам нужны байтовые значения, используйте byte[] или лучше ByteArrayOutputStream, используя write(176) и в конце toByteArray.


Пояснение

В диапазоне ASCII 0-127 Character.toChars дают один символ, представленный в UTF-8 одним байтом.

В диапазоне ISO-8859-* 160-255 также один символ, один байт. В диапазоне 128-159 находятся в основном управляющие символы UTF-8, как и в ASCII 0-32.

Но некоторые значения используются для многобайтовой кодировки UTF-8. Более высокие значения 256-... могут дать один символ (16 бит) или несколько символов.

person Joop Eggen    schedule 21.04.2012

hexString = String.format ("%x", 176); 

это еще один вариант.

person user unknown    schedule 21.04.2012