gpt4 book ai didi

java - 从 C 程序编写十六进制字节代码 Java

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:30 24 4
gpt4 key购买 nike

我正在使用 flex、bison 和 c 开发一个项目,我必须为一种简单的语言创建一个简单的编译器,该编译器直接在类文件中生成 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");

直接用16进制编码怎么写,实在是看不懂...

非常感谢您的帮助。

最佳答案

十六进制是数字的文本表示。你不想写十六进制;你想写下实际的数字。

要生成四个字节的 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 结尾,您可以使用 %s 格式说明符,但您实际上无法使用它输出 NUL。另一方面,fwrite 旨在写入任意字节。

关于java - 从 C 程序编写十六进制字节代码 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56332270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com