gpt4 book ai didi

java - 如果我用 Java 生成二进制文件,我该如何读取 C++ 中的二进制文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:32 28 4
gpt4 key购买 nike

我正在研究一种加密算法,我需要用 Java(一个二进制文件)生成一些信息以便用 C++ 读取。

我不确定问题是我如何创建二进制文件还是我如何读取它,尽管我可以完美地读取 Java 中的信息。

所以我做了一个简单的测试。在 Java 中,我将数字 9 保存到一个二进制文件中,然后我尝试在 C++ 中读取它,但它读取的不是数字。

谁能告诉我该怎么做?

Java代码:

int x = 9;

try{
ObjectOutputStream salida=new ObjectOutputStream(new
FileOutputStream("test.bin"));
salida.writeInt(x);
salida.close();
System.out.println("saved");
} catch(Exception e){
System.out.println(e);
}

C++代码:


streampos size;
char * memblock;

ifstream file ("test.bin", ios::in|ios::binary|ios::ate);
if (file.is_open())
{
size = file.tellg();
cout<< size << endl;
memblock = new char [size];
file.seekg (0, ios::beg);
file.read (memblock, size);
file.close();

int i;
for (i = 0; i < sizeof(memblock); i++)
{
cout << memblock[i] <<endl;
}
delete[] memblock;
}
else cout << "Unable to open file";

这是输出:





w

最佳答案

您的问题是您正在使用 ObjectOutputStream 写入数据。这会以特定于 Java 的形式对对象图进行编码,以便使用 ObjectInputStream 读取。要使数据流与 C++ 兼容,您需要执行以下两项操作之一:

  1. 在理解 ObjectOutputStream 产生的输出格式的 C++ 代码中实现——即在 C++ 中重新实现 Java 在 ObjectInputStream 中所做的事情。不推荐这样做。
  2. 使用标准 FileOutputStream 从 Java 中以定义的序列化格式写出您的数据,然后您的 C++ 代码可以读取这些数据。如何指定和实现这取决于您,但可以非常简单,具体取决于数据的复杂性。

关于java - 如果我用 Java 生成二进制文件,我该如何读取 C++ 中的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57730726/

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