我有这两个二进制文件,这是输出的java代码和C++代码在同一台机器上。问题是字节顺序似乎不同(也许是小端对大端?)。所以问题是:为什么这在同一台机器上是不同的?以及我如何以相同的字节顺序转换/查看文件以比较它们?
左边的文件是通过以下方式实现的:
std::ofstream file("binary.bin", std::ios::binary);
for (const auto& row : vector) {
file.write(reinterpret_cast<const char*>(row.data()), row.size() * sizeof(float));
}
file.close();
在Java中(右):
File file = new File(path, "/" + "binary2.bin");
try (FileOutputStream fos = new FileOutputStream(file)) {
fos.write(byteArray);
} catch (IOException e) {
e.printStackTrace();
}
谢啦,谢啦
1条答案
按热度按时间gijlo24d1#
不幸的是,没有给出那么多信息。看起来4个字节的块被颠倒了。
这可能与实现有关。C++以一种方式存储,Java以另一种方式存储。但由于我们看不到程序在写,我们只能猜测。我们也看不到文件的结构(1字节数据或2字节数据或4字节数据或8字节数据块或带填充的结构或其他)
但是,至少我们可以重新排序4字节的二进制数据块。
这并不复杂。我们打开手头的文件,读取
std::vector
中的所有数据,然后关闭文件。然后我们重新打开文件进行写入,这将覆盖之前在文件中的所有内容,文件将为空。
我们迭代
std::vector
中的源数据,并使用算法库中的std::reverse
函数反转4字节块。最后,我们将所有数据写回文件。
我起草了一些演示函数来创建一个测试文件并显示内容。
请参阅: