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
[36743] Re:Re:Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!!
유영인 Cuperido [cuperido] 1333 읽음    2004-08-12 16:27
아무래도, 저장때 사용하신 메소드가 잘못되었거나, 아니면 제가 생각하고 있는 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 1248 2004/08/12
36739         Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 김준원 1288 2004/08/12
36741             Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 유영인 Cuperido 1263 2004/08/12
36742                 Re:Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 김준원 1193 2004/08/12
36743                     Re:Re:Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 유영인 Cuperido 1333 2004/08/12
36745                         2nd Re:Re:Re:Re:Re:Re:바이너리 입력과 출력에서!!! 진짜 원시적인 입출력을!!! 김준원 1046 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.