으로 작성된 이진 파일을 읽는 중입니다. Microsoft Visual Studio 2010 Express에서 C++의 fstream 라이브러리를 사용하여 이진 데이터 파일 (* .mgr 확장자 -> 내 회사 응용 프로그램에서만 사용됨)을로드하는 DLL을 만듭니다. 이 파일은 Delphi를 사용하고있는 회사의 다른 누군가가 개발 한 응용 프로그램으로 만들어집니다. 그는 처음 15 바이트는 파일이 만들어진 날짜를 나타내는 문자와 앱의 버전과 같은 다른 것들이어야한다고 말합니다 :FStream은 Delphi의 이진 작성기
"XXXX 2012".
다음 (바이너리 모드) fstream로로드하고 fstream (문자열 모드) 다른 파일을 기입 한 후의 결과는 다음
가"[] XXXX 2 0 1 2"
가첫 문자는 알 수없는 char (직사각형) 다음 각 char 사이에 공백이 있습니다. 마지막으로 31 바이트 폭입니다. 실제 문자의 경우 15 개, 공백의 경우 15 개, rect char = 31의 경우 1 개입니다.
기타 정보 :저는 C++을 사용하고 있으며, 응용 프로그램 개발자는 Delphi를 사용하고 있습니다. fstream을 사용하고 있습니다. 그는 BW.Write() 함수를 사용하고 있습니다. (BW == Binary Writer?) 그는 Windows XP Professional을 사용하면서 Windows 7을 사용합니다.
문제 진단을 할 수 있습니까? 사전에
감사
먼저 편집 : 그 첫 번째 바이트를로드 C++ 코드를 추가 해요.
먼저 그는 embarcadero Rad Studio XE2에서 Delphi XE2를 사용하고 있습니다.
내가 아는 것에서 PChar는 일반 문자 (1 바이트)와 반대로 폭이 2 바이트 인 widechars (delphi 2009 이후)로 구성된 널 종료 문자열입니다. 기본적으로 그는 바이트 대신 단어를 저장합니다. 우리가 30 바이트를 얻을 수 있도록
wchar_t header[15];
DXFLIBRARY_API void loadMGR(const char* szFileName, const char* szOutput)
{
fstream file;
file.open(szFileName, ios::binary | ios::in);
if(file.is_open())
{
file.read(reinterpret_cast<char*>(header),sizeof(header));
}
file.close();
//zapis
fstream saveFile;
saveFile.open(szOutput, ios::out);
if(saveFile.is_open())
{
saveFile.write(reinterpret_cast<const char*>(header),sizeof(header));
}
saveFile.close();
}
헤더 (15 개)의 wchar_t의의를 포함
여기 MGR를로드하는 코드입니다. 조사한 후에 나는 변환하는 방법을 모른다.
스택 오버플로에 오신 것을 환영합니다. 친절한 조언. 이와 같은 질문에는 코드가 포함되어 있습니다. 파일을 읽고 텍스트 스트림을 작성하는 코드가 도움이되었을 것입니다. 또한 Delphi 버전이 중요합니다.두 가지 델파이 분열, 즉 유니 코드 이전과 유니 코드 이후가 있습니다. 동료가 사용하는 버전은 무엇입니까? –