c++에서 vector 형태의 값들을 binary 파일로 저장한 후
이를 편리하게 python에서 처리하고 싶은 경우가 있다.
나의 경우, c++의 오디오 버퍼에서 값을들 그대로 가져와서 python에서 파일을 불러와서 처리를 하고 싶었다.
이를 테스트 하기 위해서 float vector를 binary파일로 저장하는 간단한 c++ 프로젝트를 생성했다.
#include <vector>
#include <stdio.h>
#include <fstream>
std::vector<float> x;
void main() {
std::ofstream FILE("file.binary", std::ios::out | std::ofstream::binary);
for (int i = 1; i < 11; i++) {
for (int j = 1; j < 129; j++) {
x.push_back(j*i);
}
FILE.write(reinterpret_cast<const char*>(&x[0]), x.size() * sizeof(float));
x.clear();
}
FILE.close();
}
128개씩 버퍼를 쌓을때마다 파일에 바이너리 형태로 저장하게끔 테스트한 것이다.
이를 실행하면
file.binary 라는 파일이 생성된다.
이를 파이썬에서 불러오는 것은 numpy를 활용하면 매우 간단하게 불러올 수 있다.
import numpy as np
f = open("file.binary", 'rb')
data = np.fromfile(f, np.float32)
print(data)
open("file.binary", 'rb') <- b가 중요하다. (바이너리로 open하겠다는 옵션)
출력을 보면
아래처럼 1,2,3, ... 1260, 1270 ,1280 으로 잘 출력되는 것을 볼수 있다.