Social Icons

.

воскресенье, 8 декабря 2013 г.

Преобразование HEX-String в byte в JAVA

Элементарная задача в JAVA превращается в серьезную работу. Есть строка состоящая из символов 0123456789ABCDEF. Требуется представить ее массивом байт 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF. Или наоборот. Есть массив байт, полученный из потока, требуется представить его в виде строки, каждый символ которого определяет полубайт входного массива.

Решение:

 /***
  * Представляет hexString строкой байт
  * @param szMessage - исходная строка состоящая исключительно из символов "0123456789ABCDEF"
  * @return массив байт содержащий исходную строку полубайтов, упакованную в байты
  */
 public static byte[] toBytes( String szMessage){
  if( szMessage == null || szMessage.length() == 0 ) return null;

  int nLength = szMessage.length();
  byte theBytes[] = new byte[nLength / 2];
  for (int i = 0; i < nLength; i += 2) {
   theBytes[i/2] = (byte) ((Character.digit(szMessage.charAt(i), 16) << 4) + Character.digit(szMessage.charAt(i+1), 16));
  }
  return theBytes;
 }
Обратно:

 /***
  * Преобразует входной массив в hexString - строку полубайтов: 
  * 0x01, 0x23, 0x45 -> "012345"
  * @param theBytes Входной массив байтов
  * @param nOffset - смещение первого элемента в массиве
  * @param nLength - количество байт для преобразования
  * @return строка полубайтов
  */
 public static String toString(byte[] theBytes, int nOffset, int nLength){
  if(!is(theBytes, nOffset, nLength)) return "";
  
  char[] theChars = new char[nLength * 2];
  int nIndex = 0;
  for ( byte nValue : theBytes ) {
   if(nOffset > 0) {nOffset--; continue;}
   theChars[nIndex * 2] = hexArray[(nValue & 0xFF) >>> 4];
   theChars[nIndex * 2 + 1] = hexArray[nValue & 0x0F];
   nIndex++;
   if(--nLength <= 0) break;
  }
  return new String(theChars);
 }

Оригинал

Комментариев нет:

Отправить комментарий

 

Так говорил Учитель:

У хорошо написанной программы есть свой собственный рай, у плохо написанной — свой собственный ад.

Russian Developer

Взгляд его светел, усилия праведны, старания бесплодны, дело безнадежно ...