用python编写字节格式的numpy数组,用C++阅读

ecbunoof  于 2023-03-02  发布在  Python
关注(0)|答案(1)|浏览(135)

我使用下面的代码将numpy数组转换为bytes并写入文件:

import numpy as np
f=open("myfile","wb")
mydata=np.array([1,2,3,600])
bina = mydata.tobytes()
print(bina)
f.write(bina)
f.close()

然后,我用C++读取了这个文件,使用了以下代码:

typedef unsigned char BYTE;
using namespace std;
std::vector<BYTE> readFile(const char* filename)
{
    // open the file:
    std::streampos fileSize;
    std::ifstream file(filename, std::ios::binary);

    // get its size:
    file.seekg(0, std::ios::end);
    fileSize = file.tellg();
    file.seekg(0, std::ios::beg);

    // read the data:
    std::vector<BYTE> fileData(fileSize);
    file.read((char*) &fileData[0], fileSize);
    return fileData;
}

int main()
{
    std::vector<BYTE> fileData = readFile("myfile");
}

我无法在C++中生成原始数据[1,2,3,600],我该怎么办?

mo49yndu

mo49yndu1#

你必须决定一个元素大小(32或64位的元素),并使用相同的两端。理想情况下,你还应该决定字节序,但我假设你会使用相同的系统,所以将有相同的字节序。让我们假设我们使用32位:
Python面:

import numpy as np
f=open("myfile","wb")
mydata=np.array([1,2,3,600], dtype='int32')
bina = mydata.tobytes()
print(bina)
f.write(bina)
f.close()

C++端:

using namespace std;
std::vector<int32_t> readFile(const char* filename)
{
    // open the file:
    std::streampos fileSize;
    std::ifstream file(filename, std::ios::binary);

    // get its size:
    file.seekg(0, std::ios::end);
    fileSize = file.tellg();
    file.seekg(0, std::ios::beg);

    // read the data:
    std::vector<int32_t> fileData(fileSize/sizeof(int32_t));
    file.read((char*) &fileData[0], fileSize);
    return fileData;
}

int main()
{
    std::vector<int32_t> fileData = readFile("myfile");
}

相关问题