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
[36745] 2nd Re:Re:Re:Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!!
김준원 [reversez] 1045 읽음    2004-08-12 16:41
갑자기 문제가 생겨버렸습니다.
fiHandle = fopen("C:\\DOWNLOAD\\TEST.DAT", "wb");
이 부분에서 "C:\\DOWNLOAD\\TEST.DAT"
이 값을 SaveDialog 에서 받아온 값으로 넣어주려면 어떻게 해야되나요????
ㅡ,.ㅡ;;;a


유영인  Cuperido 님이 쓰신 글 :
: 아무래도, 저장때 사용하신 메소드가 잘못되었거나, 아니면 제가 생각하고 있는 ASCII와
: HEX 개념이 준원님과 달라서 착오를 일으키는것 같습니다.
:
: 우선 아래 두가지 방법의 예시를 보시고 원하시는 방법이 있으신지 찾아보기시 바랍니다.
:
: 첫번째 함수 (Button1Click)는, 준원님 말씀대로 0, 1 을 넣으면 Hex 코드로 0, 1 을 넣는
: 코드입니다. 실질적으로 Hex 값이 01, 01 로 출력됩니다.
:
: 두번째 함수 (Button2Click)는, 9를 입력하면 나오는 2진수 값이 1001 인데, 이것을 맵핑시켜서
: Hex 코드로 10, 01 을 넣는 예제입니다.
:
: 또한, char 형이나 int 형등을 그냥 저장시키면 자동으로 Hex 값으로 바뀌어 저장됩니다.
: (단, CPU에 따라서 저장 순서는 바뀝니다. IBM계열은 뒤쪽에서 앞쪽으로 변환되고 홀수로
: 남은 자리수는 0으로 채웁니다)
:
:
: cuperido
:
: //---------------------------------------------------------------------------
:
: #include <vcl.h>
: #include <stdio.h>
: #pragma hdrstop
:
: #include "Unit1.h"
:
: //---------------------------------------------------------------------------
:
: #pragma package(smart_init)
: #pragma resource "*.dfm"
:
: TForm1 *Form1;
:
: //---------------------------------------------------------------------------
: __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
: {
: }
:
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
:
:  FILE              *fiHandle;
:  char              temp[2];
:
:  temp[0] = 1;
:  temp[1] = 2;
:
:  fiHandle = fopen("C:\\DOWNLOAD\\TEST.DAT", "wb");
:  fputc(temp[0], fiHandle);
:  fputc(temp[1], fiHandle);
:  fclose(fiHandle);
:
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
:
:  unsigned char     chTest, chHiBit, chLowBit;
:  char              caBin[10];
:  FILE              *fiHandle;
:  int               itCount;
:
:
:  chTest = 9;
:
:  ultoa(chTest, caBin, 2);
:
:  // 홀수로 끝나면 앞에 0을 붙여 짝수로 채워줌
:  if(strlen(caBin) % 2) {
:    memcpy(&caBin[1], caBin, strlen(caBin) + 1);
:    caBin[0] = '0';
:  }
:
:
:  fiHandle = fopen("C:\\DOWNLOAD\\TEST.DAT", "wb");
:
:  for(itCount = 0; itCount < strlen(caBin); itCount += 2) {
:    chHiBit  = caBin[itCount] == '1' ? 1 : 0;
:    chLowBit = caBin[itCount + 1] == '1' ? 1 : 0;
:
:    fputc((chHiBit << 4) + chLowBit, fiHandle);
:  }
:
:  fclose(fiHandle);
:
: }
: //---------------------------------------------------------------------------
:
:
: 김준원 님이 쓰신 글 :
: : 흠... 만약에 문자배열에 char  타입의 변수에 수치를 넣어줘서 저장이 된다면 그것을 그냥 그대로 쓰는것도 가능하지만....
: :
: : 문제는 이겁니다...
: :
: : char temp[2];
: :
: : temp[0] = 1;
: : temp[1] = 2;
: :
: : 이라고 한 뒤에
: : 이것을 저장하면 말 그대로
: :
: : 헥사 에디터 같은 툴을 이용하여 내부 파일에 값을 보면
: :
: : 01 02 가 나와야 정상인데.....
: :
: : 어떤 이유에서인지 Borland 쪽에서는
: : 1과 2 를 바로 char 타입의 글자 1 2 로 처리를 해버리더군요....
: :
: : 이 부분에서의 문제는 어떻게 해결을 해야되는가요???
: :
: : 값의 지정이야 바이너리값을 넣어주면... 연산을 통해서 8 비트 단위로 쪼개주면 잘 들어가겟지만....
: :
: : 이상하게 ㅡㅡ;;; 1 같은 숫자를 수치로 먹지 않고 글자로 먹어버리는 난감한 상황에 어찌 프로그래밍 해야 될지 잘 모르겟습니다.
: :
: : 이런 저런것 답변 매우 감사드리며 이번 것도 답변 주시길 바라는.... -ㅂ-)b
: :
: :
: :
: :
: : 유영인  Cuperido 님이 쓰신 글 :
: : : 약간은 어쩌면 비트 연산과 파일 입출력에 관한 이슈는 서로 개별적인 사항입니다.
: : :
: : : bitset은 비트 연산에 관한 템플릿으로 기본적으로 빌더 내에서도 제공하고 있지만,
: : : 이 사항이 파일 입출력과 직접 연관이 있다고 보기에는 힘듭니다.
: : :
: : : 만약, 준원님께서 원하시는 대로 파일을 비트대로 읽고 쓰는 루틴을 물론, 구현을 할수는
: : : 있을 것입니다. (전에 말씀드린 방법대로)
: : :
: : : 하지만, 이것은 퍼포먼스를 상당히 떨어트리는 구조가 되겠지요. 제가 이제까지 경험한 바로는
: : : IBM-PC상에서는 파일 입출력을 Bit단위로 하지는 않습니다.
: : :
: : : 따라서, 다시 제안을 드리자면, 비트 단위는 메모리에서 처리하시고, 파일 입출력은 바이트
: : : 단위로 하셔서 메모리 단에서 적절히 처리하여 퍼포먼스를 높이는 방법을 택하시는 것이
: : : 가장 효율적일것 같다. 라는 말씀입니다. :)
: : :
: : :
: : : cuperido
: : :
: : :
: : :
: : : 김준원 님이 쓰신 글 :
: : : : 이런 저런것들에 대해서 알아보니... bitset 이라는 것이 있더군요!
: : : :
: : : : 혹시 이것에 대해서 아시는지요???
: : : :
: : : : bitset은 형태가 어찌 다른건지요??? 내부 데이터의 접근과 파일로의 저장은 어떤 식으로 해야되는지요?
: : : :
: : : : 유영인  Cuperido 님이 쓰신 글 :
: : : : : 파일 입 출력은 무조건 Byte 단위로 이루어집니다.
: : : : : Bit 단위로 입출력을 하는 것은 현재 바이트를 읽어서 비트 연산을 한후 다시
: : : : : 그 연산된 바이트를 기록 하는 방법밖에는 없습니다
: : : : :
: : : : : 압축 프로그램등이 비트 단위로 연산이 이루어지는데, 이 역시 바이트 단위로
: : : : : 쭉 읽어들인다음 비트 연산을 다시 하는 방법을 사용하고 있습니다.
: : : : :
: : : : :
: : : : : cuperido
: : : : :
: : : : : 김준원 님이 쓰신 글 :
: : : : : : 바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!!
: : : : : :
: : : : : : 무슨 소리냐? 하시는 분 계실지 모르겟습니다...
: : : : : :
: : : : : : 흔히들 데이터 저장을 바이너리로 저장할때
: : : : : :
: : : : : : Char 사이즈 즉 8Bit 단위로들 저장을 하시거나 읽어오시는 경우가 있지 않습니까????
: : : : : :
: : : : : : 어디한번
: : : : : :
: : : : : : 진짜 무식하게
: : : : : :
: : : : : : 1bit 단위!!!
: : : : : :
: : : : : : 바이트 단위로!!!
: : : : : :
: : : : : : True False 단위로!!!
: : : : : :
: : : : : : 파일 읽기와 저장을 해보고 싶은데...
: : : : : :
: : : : : : OpenDialog 와 SaveDialog 를 이용하여 작업을 하려면 어찌 해야되는건가요????
: : : : : :
: : : : : : 이런 경우에 대해서 혹시 생각해보신분 계신가요???

+ -

관련 글 리스트
36729 바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 김준원 1185 2004/08/11
36736     Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 유영인 Cuperido 1247 2004/08/12
36739         Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 김준원 1288 2004/08/12
36741             Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 유영인 Cuperido 1263 2004/08/12
36742                 Re:Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 김준원 1192 2004/08/12
36743                     Re:Re:Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 유영인 Cuperido 1333 2004/08/12
36745                         2nd Re:Re:Re:Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 김준원 1045 2004/08/12
36747                             Re:2nd Re:Re:Re:Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 유영인 Cuperido 1079 2004/08/12
36748                                 3rd Re:Re:2nd Re:Re:Re:Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 김준원 968 2004/08/12
36749                                     Re:3rd Re:Re:2nd Re:Re:Re:Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 유영인 Cuperido 963 2004/08/12
36750                                         4rd Re:Re:3rd Re:Re:2nd Re:Re:Re:Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 김준원 902 2004/08/12
36751                                             Re:4rd Re:Re:3rd Re:Re:2nd Re:Re:Re:Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 유영인 Cuperido 1132 2004/08/12
36752                                                 5th Re : 바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 김준원 1205 2004/08/12
36753                                                     Re:5th Re : 바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 유영인 Cuperido 1300 2004/08/12
36744                         Re:Re:Re:Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 김준원 1068 2004/08/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.