Написать шестнадцатеричный байт-код Java из программы c - PullRequest
1 голос
/ 27 мая 2019

Я работаю над проектом с flex, bison и c, и мне нужно создать простой компилятор для простого языка, который генерирует Java-байт-код непосредственно в файле Class, затем я смог бы выполнить его с помощью Java. Проблема в байт-коде Java. Я не знаю, как записать байт-код в шестнадцатеричном формате непосредственно в файл из моей программы на Си.

Я попытался вручную с помощью Sublime Text написать «CAFE BABE» и сохранить его с шестнадцатеричной кодировкой. Оно работает. Я пробовал разные fwrite и fprintf, но не могу найти хороший способ сделать это.

FILE *dest = fopen("HelloWorld.class", "wb");
fwrite("CAFEBABE", sizeof(unsigned int), 4, dest);

Я также видел некоторые fprintf с 02x ...

fprintf(dest, "%02x", "0xCA");

Я действительно не понимаю, как писать напрямую с помощью шестнадцатеричного кодирования ...

Большое спасибо за любую помощь.

1 Ответ

3 голосов
/ 27 мая 2019

Hex - текстовое представление чисел.Вы не хотите писать hex;Вы хотите записать действительные числа.

Чтобы получить четыре байта CA FE BA BE, вы можете использовать любое из следующего:

const unsigned char* bytes = (const unsigned char*)"\xCA\xFE\xBA\xBE";

unsigned char bytes[] = "\xCA\xFE\xBA\xBE";

unsigned char bytes[] = { 0xCA, 0xFE, 0xBA, 0xBE };

Что касается их вывода, fprintf - этоне идеально.Хотя вы можете использовать спецификатор формата %s, если убедитесь, что данные заканчиваются NUL, вы не можете на самом деле вывести NUL, используя его.С другой стороны, fwrite предназначен для записи произвольных байтов.

...