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
[22798] Re:Re:[질문] 제가 알고 싶은것을 다시 설명드리면...
김진영 [] 970 읽음    2002-11-23 02:20
안녕하세요?
관심을 가져 주셔서 감사합니다.
하지만 유감스럽게도 제가 구하는 답이 아니네요.
님이 사용하시는 방법은 아스키코드의 49(0x30)가 숫자 1을 나타낸다는 점을 이용하여
숫자+48을하면 원하는 숫자의 아스키 코드를 구하여 char로 저장하는 방법입니다.
그럼 이렇게 했을때 10이상의 숫자는 어떻게 저장을 할 수 있을까요?
char가 2개(2byte)가 필요하죠.
만약 10000이라면 5바이트가 필요합니다.
실제 char가 표현가능한수가 256개인데 그중 겨우 10개만 사용합니다.(0~9);
상당히 메모리의 낭비입니다.

그래서 short int를 char[2]에 저장하는 방법을 이용하려 합니다.
*((short *)char_ary) = int_value
위의 표현은 int 배열이든 char배열이든 메모리상에서는 똑같이 저장된다는 점을 이용한 것입니다.
포인터의 다음 위치를 계산할 때만 차이가 있습니다.
int는 4바이트(32비트 운영체제), char는 1바이트씩 포인터를 증감시키죠.
포인터를 사용하실수 있다면 무슨 뜻인지 알수 있을것 같습니다.
이렇게 하고 문자배열을 출력해보면 입력한 숫자에 따라 해당아스키코드가 다 나옵니다.
물론 2개의 char가 1개의 short int를 의미하죠.
나중에 복원하여 사용합니다.

이런식으로 메모리의 낭비없이 정수를 문자열로 저장하고 싶습니다.
그런데 제가 사용한 방식으로 파일에 저장하면 문자열의 길이가 다르게 저장됩니다.
항상 10바이트 되어야하는데 어떤 것은 더 크기도 하고 더작게도 됩니다.
그러니 읽을때 10바이트씩 읽으면 엉뚱한 데이터를 읽게 됩니다.

그래서 "메모리의 낭비없이 항상 일정한 길이를 가지게 정수를 문자열로 저장하고 싶다"는 것이 제가 궁금한 점입니다.
혹시 아시면 다시 답변을 부탁드립니다.
다시한번 답변에 감사드립니다.
그럼 이만...


권기식 님이 쓰신 글 :
: 질문이 이해가 잘 안됩니다만...
: 저도 잘 모르지만 아는대로만 적어보겠습니다.
:
: 단순히 1, 2, 3, 4, 5라는 숫자들을 "12345"라는 문자열로 만들고 싶으신거라면...
: 배열보다 하나 큰 char 배열을 생성하고...
: 정수에다가 0x30을 더해서 char 배열에 넣어주면 될 것 같은데요...
:
: char str[6];
: short int int_ary[5]={1,2,3,4,5};
: for(int i = 0; i < 5; i++)
: {
:     str[i] = 0x30 + int_ary[i];
: }
: str[5] = '\0';
:
: 이렇게 하면 되지 않을까요?
: 님처럼 하시면 16진수로 표현했을 때 각 문자 배열에 0 1 0 2 0 3 0 4 0 5 가 저장되는데...
: 붙여 쓰면 01 02 03 04 05 처럼되는데...
: 이런 포맷을 Unpacked BCD라고 하지요...
: Packed BCD는 12 34 50 이렇게 저장합니다.
:
: 그럼.. 도움이 되셨길 바랍니다.

+ -

관련 글 리스트
22775 [질문] 정수를 문자열에 저장하기 김진영 953 2002/11/22
22799     Re:[질문] 정수를 문자열에 저장하기 Julien 1148 2002/11/23
22789     Re:[질문] 정수를 문자열에 저장하기 권기식 830 2002/11/22
22798         Re:Re:[질문] 제가 알고 싶은것을 다시 설명드리면... 김진영 970 2002/11/23
22802             Re:Re:Re:[질문] 제가 알고 싶은것을 다시 설명드리면... 하느리 857 2002/11/23
22814                 Re:Re:Re:Re:[질문] 자문자답.. 김진영 923 2002/11/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.