在 Python 中反序列化用 C# 创建的字节数组

本文关键字:字节 字节数 数组 创建 Python 反序列化 | 更新日期: 2023-09-27 18:33:03

我在 C# 中有一个 2D 交错双精度数组,我将其转换为如下字节数组:

byte[][][] byteArray = new byte[10][][];

我以这种方式将字节数组保存为二进制文件:

BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream(path, FileMode.Create, FileAccess.Write))
{
   formatter.Serialize(stream, byteArray);
}

现在,我需要读取python中的文件才能在那里重建 2D 双数组......

我试图使用numpy.fromfile(),想知道应该如何做到这一点。

在 Python 中反序列化用 C# 创建的字节数组

我所知,BinaryFormatternumpy.fromfile()不是跨平台的,更不用说语言了。使用跨平台的格式会更容易,例如 JSON。将double转换为byte[]的部分也可能有问题,例如由于字节序。如果性能和数据要求不是真正的问题,那么不使事情复杂化会更容易。

此示例对 C# 使用 Json.NET:

double[][] myArray = // whatever
var path = // whatever
using (StreamWriter file = File.CreateText(path))
{
    JsonSerializer serializer = new JsonSerializer();
    serializer.Serialize(file, myArray);
}

然后在 Python 中,您所要做的就是:

import numpy
import json
path = # whatever
with open(path) as f:
    myArray = numpy.array(json.load(f))
# we now have the array! e.g.
print(myArray.dtype) # float64
print(myArray[0][0]) # 0.79449418131