C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[36961] Re:Re:Re:바이너리 파일 좀 읽어주세요.
김광수 [kwangsoo72] 1462 읽음    2004-08-24 16:00
저두 일전에.. 고생 한적이 있는데 파일을 읽어 들일때의 방식에 따라 틀려 지게 되는데
binary 파일이면 아래와 같은 형태로 읽으시면 됩니다.
제가 *.bin 파일을 읽어 봤으니까 될겁니다.

그리고 읽으실때유의사항이 있습니다. 한번에 16byte 이상은 읽으 실수 없습니다.

이점 유념 하셔서 읽으시기 바랍니다.

아래의 예제는 제가 bin 파일을 읽을때 사용한것입니다.참조 하시기 바랍니다.

long TMainForm::OpenFile_LoadData(char* szStart, char* szEnd, unsigned char* reData)
{
    bool bSave = false;
    char strImsi[0x1000A]={0,};
    //unsigned char imsistr[3]={0,};
    long nImsi = 0;
    int nCheck = 0;
    ifstream fin;

    fin.open(strFile.c_str(),ios_base::in|ios_base::binary);
    int j = 0;

    if(!fin.is_open())
      return 0;

    AnsiString str_restore,str_temp,strStart,strEnd;

    unsigned char str_buf[300];
    int nLength;

    while(1)
    {
        str_restore ="";
        memset(str_buf,0,sizeof(str_buf));
        fin.read((unsigned char*)str_buf,sizeof (unsigned char) * 16);

        nLength = j * 16;

        strStart.sprintf("%08X", nLength);
        if(strcmp(strStart.c_str(),szStart) == 0)
        {
            bSave = true;
        }
        if(fin.eof())
        {
            bSave = false;
             break;
        }
        if( bSave == true)
        {
            for(int count1=0;count1<16;++count1)
            {
                nCheck = 0;
                strImsi[nImsi++] = str_buf[count1];
                nCheck = str_buf[count1];
                uCheckSum.nCheckSum = uCheckSum.nCheckSum + nCheck;
                }
        }

        if(strcmp(strStart.c_str(),szEnd) == 0)
        {
            bSave = false;
           // bCheck_SendData = false;
            break;
        }
        j++;

    } //end while

    memcpy(reData,strImsi,nImsi);
    return nImsi;
}


30억 님이 쓰신 글 :
: 답변감사드립니다.
: 지금 파일을 읽으면 원본 데이터가
: 11122120040820235000000.002P00007.0U000.001P000.040P0000.40P00000.0P000.055P000.015P0000.01P00000.0P0000013D00001.6M00023.8C1000.0021017.0001000.0021000.0431000.411000100020001001700010000##
: 이런식으로 죽 나열되어 있는 데이터 입니다. 그런데 제가 이 바이너리 파일을 만든게 아니라 다른데에서 만든 파일을 제 프로그램에서 읽어들여서 아스키로 바꿔주고 싶거든요.
: 그런데 제가 초보라 바이너리 파일을 읽는 방법을 잘 모르겠습니다.
: 읽어도 이상한 값으로만 깨지고. 어떻게 해야 읽을수 있을까요? 그냥 읽으면 된다고는 하는데 그 방식을 몰라서 .... 부탁드립니다.
:
: smleelms 님이 쓰신 글 :
: : 음.. 바이너리 파일 2개를 첨부하셨는데요..
: : 바이너리로 읽는 방식이 중요한게 아니라, 이 바어너리 데이터가 어떤 포맷으로 저장된, 무엇을 의미하는 데이터인가가 중요하다고 하겠지요..
: :
: : 실제로 올려주신 바이너리 데이터를 메모리에 읽어들여도 그데이터들을 어떤 데이터 형태로 저장(대입)하느냐에 (ex : char, float, int , struct...) 따라서 다를테니까요..
: :
: : 무엇보다도 올려주신 바이너리 파일이 어떠한 형태로 저장이 된것인지를 아셔야, 읽어들여도 디코딩이 되겠죠.
: :
: : 물론 아신다면 질문에 그 부분에 대한 언급이 있었겠지만, 바이너리 파일 2개 올리시고 읽을 수 없냐고 하시길래 노파심에 적어봅니다. (제가 잘 몰라서 그럴수도 있습니다.. 양해해 주시길.. ^^;)
: :
: : 그럼.. 부디 원하시는바를 이루시길...
: :
: :
: : 30억 님이 쓰신 글 :
: : : 바이너리 파일을 읽어주세요.
: : : 이 파일을 읽어야 하는데 잘 안되네요.
: : : Q&A에 나온 방식으로 읽었는데 원래 데이터가 이상한건지
: : : 아니면 바이너리 읽는 방식이 다른 방식이 있는지 알고 싶습니다.
: : : 고수님들 한번 읽어봐주세요.부탁드립니다.

+ -

관련 글 리스트
36952 바이너리 파일 좀 읽어주세요. 30억 1084 2004/08/24
36957     Re:바이너리 파일 좀 읽어주세요. smleelms 1200 2004/08/24
36959         Re:Re:바이너리 파일 좀 읽어주세요. 30억 1124 2004/08/24
36961             Re:Re:Re:바이너리 파일 좀 읽어주세요. 김광수 1462 2004/08/24
36960             Re:Re:Re:바이너리 파일 좀 읽어주세요. smleelms 1342 2004/08/24
36962                 Re:Re:Re:Re:바이너리 파일 좀 읽어주세요. bigdream 1309 2004/08/24
36964                     Re:Re:Re:Re:Re:바이너리 파일 좀 읽어주세요. smleelms 1170 2004/08/24
36965                         정말 정말 감사드립니다. bigdream 914 2004/08/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.