Сомнения по преобразованию кода C++ в Java

Я конвертирую код с С++ на Java. Имея следующие сомнения-

  1. C++ - статический символ **gprs; В Java — приватный статический String[] gprs; ИЛИ приватный статический Byte[] gprs;

  2. C++ - статический символ *маска; В Java — приватная статическая байтовая маска; (Правильный?)

  3. C++ - memset((char *)&rm,'\0',sizeof(DRMK)); // Здесь DRMK — это структура. rm является объектом ДРМК. Итак, в java мне нужно создать класс, и при объявлении переменных я должен установить отдельное значение равным 0. Это правильно?

  4. C++ - memcpy(&wp, (PMSK *)p_msk + (long)(x - 1), sizeof(PMSK)); Как отразить это в Java. PMSK здесь является структурой.
    А где - static PMSK wp; ПМСК *pm; статический символ *p_msk;

Спасибо


person JavaBits    schedule 16.05.2011    source источник


Ответы (3)


C++ - static char **gprs;

Зависит от использования gprs, но я бы сказал (судя по остальному коду), что byte больше подходит. Массив байтов.

C++ - static char *mask;

Я бы использовал байт, а не символ, учитывая имя «маски».

C++ - memset((char *)&rm,'\0',sizeof(DRMK)); 

Как указано в других ответах... нужно просто создать новый экземпляр DRMK.

C++ - memcpy (&wp, (PMSK *)p_msk + (long)(x - 1), sizeof(PMSK)); 

Это побитовая маска, если вы спросите меня. Значением wp будет то, что находится в ячейке памяти (x-1) байт с начала p_msk. По сути, он скопирует часть памяти размером sizeof(PMSK), начиная с p_msk+(x-1), в wp. Как это сделать в Java? Как вы уже догадались... массив байтов.

person Dennis    schedule 16.05.2011

  1. private static String[] gprs;
  2. private static String; // вы хотите, чтобы здесь была строка, но я не совсем уверен — зависит от контекста.
  3. Просто rm = new DRMK();
  4. Это зависит от структуры структуры PMSK. Вы должны написать метод, который семантически копирует некоторые данные из строки в объект.
person Vladimir Ivanov    schedule 16.05.2011
comment
Да, для обоих 1,2 данные, хранящиеся в char gprs, являются шестнадцатеричными. Поэтому я подумал, что Byte будет более подходящим, так как позже над ними будет логическая операция ИЛИ/И. - person JavaBits; 16.05.2011

  1. Это зависит от того, для чего используется gprs. Нет автоматического решения. Но если это персонажи, то String[] кажется более подходящим.

  2. Опять же, это зависит от того, как используется mask; либо Byte[], либо String[].

  3. Вам ничего не нужно. Java автоматически устанавливает все переменные-члены в 0, null или моральный эквивалент перед вызовом конструктора.

  4. Если я правильно понимаю код, вам нужно предоставить конструктор копирования для класса Java и вызвать его.

person James Kanze    schedule 16.05.2011
comment
Я бы использовал byte вместо Byte - person Peter Lawrey; 16.05.2011