본문 바로가기

일하면서 사용한 짧은 지식/C#

IntPtr로 전달되는 바이너리 데이터 파일로 쓰기

1. 상황

ffmpeg 디코더로 인코딩된 데이터를 넘기기 전에 제대로 된 데이터가 들어오는지 검증하기 위하여

파일로 써서 팟플레이어나 VLC로 확인하려고 했다.

이벤트가 발생할 때 IntPtr 형태로 포인터가 넘어오는 상태였고 이 포인터가 가리키는 바이너리 데이터를 파일로 써야 했다.

 

2. 사용한 방법

Marshal.Copy를 이용하여 byte 배열에 데이터를 복사하고

FileStream으로 Write하였다.

 

byte[] data = new byte[streamLen];
Marshal.Copy(streamData, data, 0, (int)streamLen);

string fileName = "test.ts";
using (FileStream test = new FileStream(fileName, FileMode.Append, FileAccess.Write))
{   
    test.Write(data, 0, (int)streamLen);
}

 

https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.copy?view=net-6.0 

 

Marshal.Copy Method (System.Runtime.InteropServices)

Copies data from a managed array to an unmanaged memory pointer, or from an unmanaged memory pointer to a managed array.

docs.microsoft.com

 

'일하면서 사용한 짧은 지식 > C#' 카테고리의 다른 글

Thread와 ThreadPool 중 선택하기  (0) 2021.09.11