gpt4 book ai didi

java - 使用 STL/POSIX 将二进制文件从 J2SE 加载到 iOS iphone

转载 作者:行者123 更新时间:2023-11-28 08:06:36 24 4
gpt4 key购买 nike

因此,我正在尝试支持我为 J2ME 开发而在 Java 中编写的一些遗留工具。

我需要在 iphone/ipad 上以 C++ 读取相同的文件格式。在你问为什么之前 ->(因为我还需要支持 Android NDK r7)

现在我无法获得匹配的值,但我确定我做对了:这是我的 Java (J2SE) 代码:-

File file = new File(location, "test.d2r");

BufferedWriter writer = new BufferedWriter(new FileWriter(file));

int i = Integer.reverseBytes(8);

writer.write(i);
writer.newLine();
writer.flush();
writer.close();

在 iOS 领域我正在做:-

NSString *url = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"d2r"];

FILE* fp = fopen([url UTF8String], "r");

if (fp)
{
int j;
printf("\nReading...\n");

fscanf(fp, "%c", &j);
fclose(fp);

printf("DIGIT 1 %d\n\n", j);
}
else
{
printf("\n\n No file found...... \n\n");
}

所以文件可以正常打开,但数字不匹配。我试过将 Endian 翻转过来。我唯一可以考虑的是,当我从一个未签名的 (java) 平台转换到一个已签名的 (c++) 平台时,我在那里得到了签名,它弄乱了值(value)。

虽然不确定,但欢迎任何指点。

最佳答案

fscanf 用于读取文本,不用于读取二进制数据。

您应该使用 fread 而不是 fscanf:

fread(&j, 4, 1, fp);

此外,您应该使用选项“rb”而不是“r”打开文件,以表明您要读取二进制文件。根据操作系统的不同,这可能是必不可少的。

这是正确的,然后这是 Java 方面:-

好的,所以 Codo 在 C++ 端的答案与 Java 端的写操作混合了

BufferedOutputStream out = new BufferedOutputStream(  
new FileOutputStream("bob_FontTool.d2r", false));

ByteBuffer buffer = ByteBuffer.allocate(4).order(ByteOrder.nativeOrder());
buffer.putInt(8);
out.write(buffer.array());

out.flush();
out.close();

关于java - 使用 STL/POSIX 将二进制文件从 J2SE 加载到 iOS iphone,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10178585/

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