창조유저그룹-커즈닷컴
Window close
ID :     PASS :   
   
  처음으로
  창조
  창조 소개
창조 다운로드
CUGz.com 소개
온라인 도움말
  커뮤니티
  가입인사
자유게시판
Q/A게시판
TIP/TECH
열린강좌
자주하는질문
아이디어게시판
  자료실
  소스자료실
프로그램자료실
기타자료실
명예의 전당
이미지 자료실
  지원/기타
  표준용어재정
구글 웹서치  
관리자 전용


창조 팁
- '창조' 에 관한 팁을 올리는 곳입니다. 다수의 이미지가 필요하시면 아래 '이미지 자료실' 에 업로드 후 불러와 주세요..


LIST ALL
Posted by 지상현2005-10-05 19:12:13, Hit : 5768
[팁#2] 파일에서 정수값 읽기!
Homepage : http://ssidang.x-y.net
Post URL : http://cugz.sjworks.net/bbs/zboard.php?id=tip&no=243
아까 올리면서 읽는 것을 안했슴다 -.-




여기선 4바이트로 딱! 고정된 정수값을 파일에서 읽는 방법을 따분하게 알려드리겠습니다 -.-



먼저, 지금까지 접근하던 방법을 소개해보죠 -_-

만약, 파일에 592365 이란 값이 정수로 기록되어 있다! 치고, 그 파일을 hex 편집기로 들여다보면
보나마나 ED 09 09 00 이렇게 적혀있을 겁니다 -_-;

마찬가지로 파일이진읽어로 4 바이트 읽어도, ED090900 라고 나오겠죠~
그럼 이 값을 어떻게 정수값으로 확 바꿀 수 있을까요?

또 다시 문득 생각나는 방법으로, 16진수를 10진수로 바꾸는 함수를 만들어서 바꿔봐요~_~
다소 느리긴 하지만, 어떻게든 만들어서 한번 바꿔보도록 합시다.

만들었다고 치고 -_-
저 값을 정수로 싹! 바꾸면~

3976792320

어? 뭔가 값이 다르네요? -_-;
남은 선택은 두 가지 입니다.

하나는 "뭐가 이래! 에이! 창조에선 정수 따위 못 읽나보다! 때려쳐!" 라고 하시고 X 버튼을 누르시거나, 또 하나는 이 재미없는 글을 계속 읽는 것입니다 -_-;



먼저, 왜 저 모양으로 나오는지부터 알아내야 이 버그를 박살낼 수 있겠지요? ~_~
이 현상은 인뗄 CPU가 숫자를 메모리에 저장할 때 리틀 엔디언이라는 방법을 써먹는 것이 화의 근원입니다 -_-;

리틀 엔디언이 뭐냐? 아~ 영어 나왔다 -_-
한 마디로 "거꿀 거꿀 거꾸리" 라는 것입니다.
뭐, 일단 아시다시피 컴퓨터의 기본 데이터 단위는 바이트라는 것을 알고 계시겠지요?
그 놈아를 저장할 때 거꾸로 저장한다는 뜻입니다. 메모리의 내용을 고대로 저장하는 파일도 마찬가지로 웬수가 되는겁니다 -_-;
그러니까, 아까 읽은 ED 09 09 00 란 값은 거꾸로 들어간 값이기 때문에, 뒤자리 부터 끊어서 거꾸로 늘어놔야 한다는 거죠 ~_~
그럼 00 09 09 ED 가 되겠죠. 이 것을 10진수로 바꿔보면 오오, 592365 라는 원하는 값이 나옵니다.

여기서 잠깐! 왜 리틀 엔디언 따위를 써서 귀찮게 하느냐~고 하실텐데 -_-;
좋아서 쓰는 겁니다 -_-; 뭐가 좋냐면, 잊어버렸습니다 -_- 여하튼 이렇게 하는게 어떤 점에서 더 속도가 빠릅니다 ~_~
(모또롤라는 빅 엔디언을 씁니다. 그대로 데이터를 저장합니다.)



여하튼... 그냥 읽은 값을 바로 10진수로 바꾸면 안되고, 16진수 문자열을 2자리씩 끊어서 거꾸로*-_-* 만든 다음에 바꿔야 뭐가 된다는 뜻이 되버리네요 ~_~

그 얼마나 귀찮습니까? 더구나 이거 되게 느리게 돼버리죠 -_-;;






자자, 그럼 진짜 하고 싶었던 말을 해봅시다 -_-;
빠르고 쉽게 읽는 방법입니다!!

파일을 이진으로 읽지 말고, 그냥 문자열로 딱 4 바이트만큼 읽습니다.

시키는대로 했다면, 이리저리 깨져버린 값을 보실 수 있습니다. -_-;
"이래서야 쓰나!!" 네, 그러면 안되죠. 하지만 그 깨진 문자열도 나름대로 의미가 있습니다!

파일에 저장된 값은 ED090900 이고, 한 문자는 1 바이트씩 차지합니다.
그래서, 첫 번째 글자는 아스키코드 ED, 두 번째 글자는 09, 세번째 글자도 09, 마지막 글자는 00 이라는 코드를 갖습니다.

자자, 그럼 문자복사로 한 글자씩 빼와서 "문수" 함수를 써보면 어떨까요?
네, 이 함수는 각 문자의 코드를 알아오는 것이기 때문에, 첫 번째 글자는 16진수로 ED, 즉 237 이란 값이 나오고, 두 번째 세 번째 글자는 9, 마지막 글자는 0 이 나옵니다.

이제, 이 값들을 조립해주기만 하면 됩니다.
아아, 주의할 것은 이 값들이 거꾸로이기 때문에 ~_~ 조립도 거꾸로!!

공식만 설명드리자면,

첫글자 + 둘째글자*256 + 셋째글자*65536 + 넷째글자*16777216

이렇게 하면 됩니다. -_-;
무슨 뜻이냐고 물어보시면, 지금으로선 할 말 없습니다 -_-;

여기서 설명하기엔 복잡하니까 나중에 따로 강좌로 설명하겠습니다~ 키키키
(그 때 설명하겠지만, 저건 실은 곱하기와 더하기가 아닙니다!!)



자, 이제 읽는 방법을 알았습니다!!
살짝 정리를 해볼까요-


문자:나실은정수야;
실수:내가진짜정수야;

나실은정수야 := 파일읽어(핸들,4);
내가진짜정수야 := 문수(문자복사(나실은정수야,1,1))     +
                  문수(문자복사(나실은정수야,2,1)*256      +
                  문수(문자복사(나실은정수야,3,1))*65536      +
                  문수(문자복사(나실은정수야,4,1))*16777216


우와~ 복잡해보이네요 -_-; 그렇지만 내용은 보시다시피 단순 노가다입니다 -_-;
이런건 사용자함수로 만들어두고 쓰는게 좋겠지요 ~_~




아, 그리고 쓰는 방법은 아래에 있지만, 저는 위의 방법을 반대로 적용해서 숫자에서 분해한 다음 "수문" 함수로 문자 조립해서 "파일써" 로 쓰는 방법을 더 좋아합니다 -_-;

이럴 것이 아니라 따로 팁으로 -_-;
도배 만세!! -_-;;;

LIST ALL               GO TO THE TOP


N
   Subject
Posted by
Date
H
142
   [팁#7] 설치를 하기전 과정에서... [1]
ps.구루 2003/11/07  5433
141
   [팁#6] 글씨 세로로 쓰기 [3]
ps.구루 2003/09/21  5705
140
   [팁#5] 모든 사용자에 대한 시스템 경로
ps.구루 2003/08/01  5333
139
   [팁#4] 메뉴의 순서를 바꿔주라! 바꿔주라! [1]
ps.구루 2003/03/13  5046
138
   [팁#3] 파일에 정수값 쓰기, 또 다른 방법!
지상현 2005/10/05  5555
137
   [팁#3] 0.9b에서 생기는 (&Z) 없애기 [8]
ps.구루 2003/03/12  4947

   [팁#2] 파일에서 정수값 읽기!
지상현 2005/10/05  5768
135
   [팁#2] 키보드 값 구하기 [1]
ps.구루 2002/12/08  6110
134
   [팁#1] 줄바꾸기 재시도~ [6]
ps.구루 2002/12/06  5112
133
   [팁#13] 여러 파일을 동시 삭제할때
ps.이진백 2004/07/20  5515
132
   [팁#12] 효율적인 반복문 4가지 팁 [11]
ps.이진백 2004/07/16  5850
131
   [팁#11] 진리형 팁 두번째 [5]
ps.이진백 2004/06/22  4970
130
   [팁#10] 진리형을 사용할 때 유의할 점 [5]
ps.구루 2004/05/16  5335
129
   [팁!] 넥슨 게임 광고 제거 하자! [5]
위자드 2004/07/26  6933
128
   [초보자님들을 위해.. ㅎㅎ]주민등록번호로 암복호화키 만들기. [1]
한수훈 2008/11/08  5413
127
   [초보를 위해] 반복문 + 리스트박스 혼합 테스트
한수훈 2008/11/30  4765
126
   [초급] 02. 명령어를 배워보자 - 기본 명령어 (1)
정윤부 2002/11/03  5797
125
   [초급] 01. 창조란 무엇인가? [9]
정윤부 2002/11/01  5951
124
   [창조버그잡기]같이 합시다. [2]
김의석 2003/04/08  4278
123
   [창조 버그] 조건문에서 문자열 반환시 문법검사 오류 [3]
박종훈 2009/02/18  5661
122
   [창조 V1.1a 16p] DB관련 명령어 중 도움말 없는 명령어와 숨...
바람 2023/02/03  312
121
   [창조 1.0] 팝업메뉴 사용 시 '제어'와 '보이기' 사용
바람 2018/01/05  2581
120
   [창조 1.0] 0.9b 대비 반복문 속도 향상.
바람 2018/01/05  2234
119
   [창조 1.0] '폴더선택창보여'와 '폴더선택창보여줘'의 차이.
바람 2018/01/05  2492
118
   [창조 1.0] 'ㅎ메모'의 '문자찾아'
바람 2018/01/05  2560
LIST ALL   Prev [1][2][3][4][5][6][7][8] 9 [10]..[14] Next
Copyright 1999-2024 Zeroboard / skin by reedyfox in miniwini style
로그인
지우개 Expert 3.0
제작자 : 천호성 님 [LINK]
로그인
대박로또2005
제작자 : 최재일 님 [LINK]
로그인
1박종훈15292 점
2지상현8809 점
3손상진7388 점
4권선중6060 점
5이진백5174 점
로그인
가입일닉네임
05/31김동률
03/31홍형기
09/01o00pp99oo
12/27이재민
11/20이희철
로그인