Ⅲ1024 2023-10-24 11:43 采纳率: 68.4%
浏览 12
已结题

java将txt文件转为二进制bin文件和python转为二进制文件不一致

java将txt文件转为二进制bin文件和python转为二进制文件不一致****
将txt文件转为二进制bin文件 txt文件每一行内容位(0,0,0,0)这种形式
java代码:

try (BufferedReader txtReader = new BufferedReader(new FileReader(ascTxtName));
                 DataOutputStream binOutputStream = new DataOutputStream(new FileOutputStream(ascBinName))) {

                String line;
                while ((line = txtReader.readLine()) != null) {
                    String[] values = line.substring(1, line.length() - 1).split(",");
                    if (values.length == 4) {
                        float[] floatValues = new float[4];
                        for (int i = 0; i < 4; i++) {
                            floatValues[i] = Float.parseFloat(values[i]);
                        }

                        ByteBuffer buffer = ByteBuffer.allocate(4 * Float.BYTES);// 分配一个ByteBuffer,大小为4个浮点数的字节数
                        buffer.order(ByteOrder.LITTLE_ENDIAN);
                        for (float value : floatValues) {
                            buffer.putFloat(value); // 将浮点数写入ByteBuffer
                        }
                        byte[] binaryData = buffer.array();
                        binOutputStream.write(binaryData);

//                        binOutputStream.write(ByteUtils.floatArrToByteArr(floatValues));
                    }
                }
            }

python代码转为bin文件代码

    with open(txt_file_path, "r") as txt_file, open(bin_file_path, "wb") as bin_file:
        # 逐行读取txt文件内容
        for line in txt_file:
            # 解析每一行的数据
            values = tuple(map(float, line.strip()[1:-1].split(',')))  # 解析 (0,0,0,0) 这种格式
            print(values)
            # 使用struct.pack将数据转换为二进制形式
            binary_data = struct.pack('4f', *values)  # 根据数据格式进行打包,'4i'表示4个整数
            print(binary_data)
            # 写入二进制数据到文件
            bin_file.write(binary_data)

    print(f"已将TXT文件 {txt_file_name} 转换为二进制文件 {bin_file_path}")

需要使java转出来的二进制bin文件和python保持一致 有小伙伴知道解决方法吗

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-24 15:02
    关注

    【以下回答由 GPT 生成】

    这个问题可能是由于数据类型的不同或者字节顺序的差异导致的。为了确保Java和Python生成的二进制文件结果一致,有以下几个方面需要注意:

    1. 数据类型:Java使用的是float类型,Python使用的是float类型。确保在转换过程中,两种语言使用相同的数据类型。(由于Java的Float数据类型是32位的,与Python的float类型相同,所以数据类型上应该没有问题)

    2. 字节顺序:Java使用的是大端字节序(Big Endian),而Python默认使用的是小端字节序(Little Endian)。确保两种语言在写入数据时使用相同的字节顺序。

    Java代码中使用了buffer.order(ByteOrder.LITTLE_ENDIAN)设置了字节序为小端字节序。为了在Python代码中使用相同的字节顺序,可以使用struct模块的格式化字符串标识符"<"来指定使用小端字节序。修改Python代码如下:

    import struct
    
    with open(txt_file_path, "r") as txt_file, open(bin_file_path, "wb") as bin_file:
        for line in txt_file:
            values = line.strip()[1:-1].split(",")
            if len(values) == 4:
                float_values = [float(value) for value in values]
                binary_data = bytearray()
                for value in float_values:
                    binary_data += struct.pack("<f", value)  # 使用小端字节序
                bin_file.write(binary_data)
    

    通过以上的修改,可以确保Java和Python在转换txt文件为二进制文件时使用相同的字节顺序,从而解决结果不一致的问题。

    希望能对你有所帮助!如果你还有任何疑问,请随时提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月2日
  • 已采纳回答 10月25日
  • 创建了问题 10月24日