본문 바로가기

카테고리 없음

c++ 에서 binary 파일 저장 후 python에서 처리하기

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 으로 잘 출력되는 것을 볼수 있다.