2

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

Пример строки бит:

Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
SmsMessage[] arr = new SmsMessage[pduArray.length];


arr[1] = 05F7A8000...

Использую конструкцию:

String string = new BigInteger(1, (byte[]) arr[1]).toString(16)

Но эта конструкция съедает ведущие нули и выводит 5F7A8000.... вместо 05F7A8000....

Nastya
  • 300

1 Answers1

4
  1. Не всякая комбинация битов/байтов может быть представлена как строка
  2. Представление битов в строку зависит от кодировки строки. Один и тот же байт может быть представлен разными символом - соглашение об этом как раз и называется кодировкой

Судя по всему речь идет об Android - там кодировка по умолчанию UTF-8. Преобразование массива байтов в строку делается так:

public static String byteArrayToString(byte[] buf)
{
    try
    {
        return new String(buf, ENCODING);
    }
    catch (UnsupportedEncodingException ex)
    {
        return null;
    }
}

ENCODING="UTF-8" - для Android или же можно просто вызывать new String(buf) - тогда будет применяться кодировка по умолчанию.

Update

Если требуется записать байты строкой, то поможет такой методочек:

public static String bytesToHex(byte[] array)
{
    char[] val = new char[2*array.length];
    String hex = "0123456789ABCDEF";
    for (int i = 0; i < array.length; i++)
    {
        int b = array[i] & 0xff;
        val[2*i] = hex.charAt(b >>> 4);
        val[2*i + 1] = hex.charAt(b & 15);
    }
    return String.valueOf(val);
}
Barmaley
  • 81,300