Строка [] для байта [] 2 символа в байте? - PullRequest
0 голосов
/ 05 марта 2012

У меня есть строка, которая содержит содержимое файла SREC. В файле SREC каждые 2 символа являются байтами (в данном случае это инструкция).

Если я превращаю строку в строковый массив, а затем преобразовываю элемент этого строкового массива в байт (по крайней мере, я думаю, что это то, что я делаю), он все равно разделяет символы, превращающие каждый символ в байт. .. как мне обойти это?

Пример 1:

String[] myFile = new String[]{"s1", "my", "na", "me","is"}; 
try 
{
    byte[] byteArray = myFile[1].getBytes("UTF-16LE");
    System.out.println(java.util.Arrays.toString(byteArray)); 
} 

Результат: [109, 0, 121, 0]

Ответы [ 2 ]

1 голос
/ 05 марта 2012

SREC преобразует байты в шестнадцатеричные закодированные числа.

http://en.wikipedia.org/wiki/SREC_%28file_format%29

Это противоположно тому, что вы пытаетесь сделать.

Хорошо, что мне использовать?

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

1 голос
/ 05 марта 2012

Вы указываете UTF-16LE в качестве кодировки. Это всегда будет использовать 2 байта для каждой Java char. Если вы не хотите использовать 2 байта на символ, не используйте UTF-16 ...

Если два символа представлены одним байтом в файле SREC, то вам необходимо иметь какое-то отображение от String до Byte - есть 2 32 возможных 2-символьных строк , но только 256 возможных байтов. Предполагая, что это фиксированное отображение, вы можете просто жестко закодировать Map<String, Byte> и извлечь значение из карты.

(Если значения действительно были шестнадцатеричными, вы могли бы использовать существующий шестнадцатеричный код синтаксического анализа - но ни одна из приведенных вами примеров строк не является допустимой парой шестнадцатеричных цифр.)

...