2015-08-13 3 views
1

У меня есть проблема, когда я пытаюсь преобразовать 'é' в Hex, он дает мне ошибку "Type mismatch: cannot convert from int to byte" код ниже:Ascii ошибки преобразования Hex

public byte[] convertUnicode(String msg){ 
     byte[] data = new byte[msg.length()]; 
    for (int i = 0; i < msg.length(); i++) { 
     switch (msg.charAt(i)) { 
     case 'E': data[i] = 0x45; break; 
     case 'è': data[i] = 0xE9; break; 
     default: data[i] = 0x3F; break; // '?' 
     } 
    } 
    return data; 
    } 

С наилучшими пожеланиями.

ответ

4

Вам нужно указать в байтах для значений над 0x7F (127, максимальное значение для подписанного байта Java), иначе литерал обрабатывается как int.

data[i] = (byte)0xE9;

Однако, похоже, что вы пытаетесь получить байты струны в определенной кодировке, которая намного проще сделать с

byte[] bytes = msg.getBytes("ISO-8859-1"); // Or any other encoding of your choice 
1

Если вы печатаете значение «0xE9» его 233, который превышает значение байта, которое составляет от -127 до +127. Поэтому вам нужно будет вывести его в байт.