2015-04-26 3 views
0

привет моя функция возвращает строку, которая уже в байтах, напримерСтрока байт [] в Java без преобразования

String ss = Long.toHexString(checksum); 
return ss; 

сейчас Строка сс результатов возврата в байтах;

result is = ff32ge34 

это контрольная сумма CRC32

сейчас в следующем методе я хочу использовать эту строку в байт []

, например

байт [] любой = сс;

но как ss является String, так что ошибка идет, но на самом деле ss String является контрольной суммой в байтах, так что я могу использовать эту строку в байте []?

я хочу это так

byte[] any = new byte[]{0xff ,0x32 ,0xge,0x34}; 

ответ

0

Вы можете использовать эту функцию, чтобы преобразовать исходный долго массив байтов. Это проще и гораздо быстрее, чем преобразование строки в массив байтов

public byte[] longToByteArray(long value) { 
    return new byte[] { 
     (byte) (value >> 56), 
     (byte) (value >> 48), 
     (byte) (value >> 40), 
     (byte) (value >> 32), 
     (byte) (value >> 24), 
     (byte) (value >> 16), 
     (byte) (value >> 8), 
     (byte) value 
    }; 
} 

Но если вы настаиваете в преобразовании строки в массив байтов, вы можете использовать что-то вроде этого

public static byte[] hexStringToByteArray(String s) { 
    int len = s.length(); 
    byte[] data = new byte[len/2]; 

    for(int i = 0; i < len; i+=2){ 
     data[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4) + Character.digit(s.charAt(i+1), 16)); 
    } 

    return data; 
} 

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

Вы можете использовать эту функцию, чтобы изменить порядок массива байт

public static void reverse(byte[] data) { 
    for (int left = 0, right = data.length - 1; left < right; left++, right--) { 
     // swap the values at the left and right indices 
     byte temp = data[left]; 
     data[left] = data[right]; 
     data[right] = temp; 
    } 
} 
+0

он оленью кожу вписывается в этих байтах [] = любой новый байт [] {0xff, 0x32, 0xge, 0x34}; даже я использую long, так как возвращает результат другой. – androidstarter

+0

Это похоже на то, что только когда вы отлаживаете, вы видите это по-другому, потому что байт в java идет от -127 до 127, а 0xFF находится за его пределами, поэтому вы, вероятно, видите отрицательный -1. здесь http://stackoverflow.com/questions/18812864/why-will-byte-not-take-0xff-in-java –

+0

спасибо, теперь он проверен на работоспособность, так как я хочу, чтобы все было легко не сложно :) – androidstarter

Смежные вопросы