从 C 程序写入十六进制字节代码 java

Write hex bytecode java from c programm

我正在使用 flex、bison 和 c 开发一个项目,我必须为一种简单的语言创建一个简单的编译器,该编译器直接在 Class 文件中生成 Java 字节码,然后我将能够用 java 执行它。问题是关于 Java 字节码。我不知道如何将十六进制字节码从我的 C 程序直接写入文件。

我尝试用 Sublime Text 手动编写 "CAFE BABE" 并用十六进制编码保存。有用。我尝试了不同的 fwrite 和 fprintf 但找不到好的方法。

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

我还看到了一些带有 02x 的 fprintf...

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

真不懂怎么直接用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不太理想。如果您确定数据是 NUL-terminated,您可以使用 %s 格式说明符,但实际上无法使用它输出 NUL。另一方面,fwrite 用于写入任意字节。