2012-03-14 1 views
1

Java-проект я работаю над требует от меня, чтобы написать Java эквивалент этого кода С:Scan Char из файла в Java

void read_hex_char(char *filename, unsigned char *image) 
{ 
    int  i; 
    FILE *ff; 
    short tmp_short; 
    ff = fopen(filename, "r"); 
    for (i = 0; i < 100; i++) 
    { 
     fscanf(ff, "%hx", &tmp_short); 
     image[i] = tmp_short; 
    } 
    fclose(ff); 
} 

Я написал этот код Java.

void read_hex_char(String filename, char[] image) throws IOException 
{ 
    Scanner s=new Scanner(new BufferedReader(new FileReader(filename))); 
    for(int i=0;i<100;i++) 
    { 
     image[i]=s.nextShort(); 
    } 
    s.close(); 
} 

Правильно ли этот код? Если его нет, какие исправления должны быть сделаны?

+1

Вы еще не пробовали свой код Java? –

+0

@ KorhanÖztürk Нет, у меня нет, поскольку это один из исходных модулей. Мне нужно строить сверху. –

+0

Что вы пытаетесь достичь? Вы хотите скопировать байты из файла в массив? – Vinze

ответ

1

Я бы с FileInputStream и прочитать байт в байт (короткий, всего два байта, символ является более «сложным», чем просто короткий http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html) , Простой код извлечения байт из моего проекта:

public static byte[] readFile(File file) throws IOException { 
    FileInputStream in = new FileInputStream(file); 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    int ch = -1; 
    while ((ch = in.read()) != -1) 
     bos.write(ch); 
    return bos.toByteArray(); 
} 

Для примера, самый простой, чтобы найти несколько примеров: запустить функцию C на него затем Java один и сравнить результаты. Он должен дать вам информацию.

+0

альтернативой, конечно же, является использование общедоступного метода ввода-вывода 'toByteArray' – Vinze

0

Помните, что тип java char довольно умный (более умный, чем просто байт) и представляет собой символ Unicode (а классы-читатели выполняют обработку входящего потока байтов в символы Unicode, возможно, декодируют или изменяют байты в соответствии с фактическими настройками локали и кодировки). Из вашего источника я предполагаю, что это только фактические байты, которые вы хотите в буфере памяти . Вот действительно хорошее объяснение, как это сделать:

Convert InputStream to byte array in Java

0

Для разбора шестнадцатеричных значений, вы можете использовать Short.parseShort(String s,int radix) с поразрядной 16. В Java, char немного отличается от short, так что если вы собираетесь выполнять операции растровых, short, вероятно, лучше типа использовать. Однако обратите внимание, что Java не имеет неподписанных типов, что может сделать некоторые из операций, которые могут быть использованы при обработке изображений (например, побитовые операции) сложнее.