Programming/C Win32 MFC2012. 6. 14. 22:59
엔디안은 "메모리에 저장되는" 바이트의 순서를 의미한다.
"메모리에" 라는것이 매우 중요한데

HDD와 같은 녀석은 bit stream 처럼 어떻게 보면 big endian 처럼 저장되며
cpu 레지스터에서도 일단~은 big endian 처럼 보인다.

유일(?)하게 영향을 받는게
메모리에서 내용을 받아와 다른 형(type)으로 변환하는 경우인데
어셈블리 언어로 이야기 하자면 mem to register 명령에 영향을 미친다고 하면 되려나?

아무튼 프로그래밍을 5년 넘게 현업으로 하고 있지만
정말 제대로 엔디안을 아는게 아닌게 아니었구나 라는 생각이 문든 드는 화두..
"비트 쉬프트 할 경우 정말 실제로는 어떻게 작동할 것인가?"
요 녀석에 멘붕을 느끼는중

[링크 : http://www.terms.co.kr/big-endian.htm ]
[링크 : http://ko.wikipedia.org/wiki/엔디언 ]

[링크 : http://www.ibm.com/developerworks/kr/library/au-endianc/index.html ] 
Posted by 구차니
Programming/C Win32 MFC2012. 6. 12. 14:14
부제 : 아오 미네랄 써글넘의 localtime()

localtime() 함수는 struct tm * 형을 리턴하는데
다르게 말하면, glibc나 library 내의 변수의 포인터를 리턴하는 식이 되는지라 매번 할당해서 돌려주는게 아니라는 의미.
즉, 연속으로 localtime을 사용해서 포인터로 받는다면, 당연히 동일 주소 동일 내용이 되므로
조건식 비교에서 항상 참이 될 수 밖에 없다 -_-

struct tm *localtime(const time_t *timep);
struct tm *localtime_r(const time_t *timep, struct tm *result);

POSIX.1-2001 says: "The asctime(), ctime(), gmtime(), and localtime() functions shall return values in one of two static objects: a broken-down time structure and an array of type char. Execution of any of the functions may overwrite the information returned in either of these objects by any of the other functions." This can occur in the glibc implementation.

[링크 : http://linux.die.net/man/3/localtime ]   


그런 이유로 아래와 같이 복사하거나, 처음부터 포인터가 아닌 값으로 받아 변수에 넣도록 해주는 것도 방법인데
오홍.. 아래 방법은 당연한 문법이지만 왜이리 생소해 보일까? ㅋㅋ

struct tm stTempTime;
pstCurTime = localtime(&lCurTime);
memcpy(&stTempTime, pstCurTime, sizeof(struct tm));

는 간단하게
struct tm stTempTime = *localtime(&lCurTime);

[링크 : http://kldp.org/node/71959 ]  

'Programming > C Win32 MFC' 카테고리의 다른 글

c 변수범위 헤더  (0) 2012.07.02
엔디안 / endian  (2) 2012.06.14
C언에 이스케이프 문자를 이용한 특수문자 출력하기  (0) 2012.03.28
함수 포인터 배열  (0) 2012.03.07
헐 # include 이게 되는거였다니!  (0) 2012.02.15
Posted by 구차니
Programming/C Win32 MFC2012. 3. 28. 13:27
"\x81" 이런식으로 printf를 해주면 0x81 번에 할당된 문자가 출력된다.
컴파일러 혹은 라이브러리 문제인지 해당 문자열의 버퍼는 unsigned char 여야 되며
char 일경우 오작동을 하는 경향이 보인다.

[링크 :  http://msdn.microsoft.com/en-us/library/h21280bw(v=vs.80).aspx]
[링크 :  http://abeldaos.tistory.com/4]
Posted by 구차니
Programming/C Win32 MFC2012. 3. 7. 10:44
함수 포인터는 거의 쓸일이 없었는데 문득 보이길래 한번 시도~
int main() 안의 void (*funcpointer[5])(); 가 포인터 함수 배열이다.

만약, 
void *funcpointer[5];
라고만 선언하고, 변수를 넣으면 함수 호출시
error: called object ‘funcpointer[0]’ is not a function
요런 에러를 발생시켜준다.

void func1() {}
void func2() {}
void func3() {}
void func4() {}
void func5() {}

int main()
{
	void (*funcpointer[5])();

	funcpointer[0] = func1;
	funcpointer[1] = func2;
	funcpointer[2] = func3;
	funcpointer[3] = func4;
	funcpointer[4] = func5;

	(*funcpointer[0])();

	return 0;
}

[링크 : http://www.newty.de/fpt/index.html]
[링크 : http://stackoverflow.com/questions/252748/how-to-use-array-of-function-pointers]
Posted by 구차니
Programming/C Win32 MFC2012. 2. 15. 16:31
한 커뮤니티 질문이 올라와서
혹시나 해서 해봤는데 헐.. -_-

#include 나
# include 나

아무튼 #으로 시작하기만 하면 문제없음!
Posted by 구차니
Programming/C Win32 MFC2011. 10. 24. 11:39
GetTempFileName () 라는 함수로 임시파일이름을 생성할수 있다.
덤으로, 리눅스에서는 mktemp()

[링크 : http://linux.die.net/man/3/mktemp]
[링크 : http://linux.die.net/man/3/tmpfile]]

[링크 : http://www.codeproject.com/Messages/2942050/Creating-and-deleting-a-temp-file.aspx]
    [링크 : http://msdn.microsoft.com/en-us/library/windows/desktop/aa364991(v=vs.85).aspx]

'Programming > C Win32 MFC' 카테고리의 다른 글

함수 포인터 배열  (0) 2012.03.07
헐 # include 이게 되는거였다니!  (0) 2012.02.15
CFileFind Class  (0) 2011.10.23
CFileDialog 말고 폴더 다이얼로그 없나?  (0) 2011.10.22
ctime()  (2) 2011.07.06
Posted by 구차니
Programming/C Win32 MFC2011. 10. 23. 23:53
특정 디렉토리의 파일목록이나 특정 확장자 / 파일이름 등으로 검색한 목록을 얻어낼수 있는 클래스이다.
하지만 "목록"은 얻을지 언정 몇개인지는 while 루프를 돌려야만 하니 조금 불편할수도 있다.

void main()
{
   CFileFind finder;
   BOOL bWorking = finder.FindFile("*.*");

   while (bWorking)
   {
      bWorking = finder.FindNextFile();

         if(!finder.IsDirectory())
            cout << (LPCTSTR) finder.GetFileName() << endl;
   }
}

[링크 : http://msdn.microsoft.com/ko-kr/library/f33e1618(v=vs.80).aspx]
[링크 : http://mnlt.tistory.com/7]
[링크 : http://www.gungume.com/37]
Posted by 구차니
Programming/C Win32 MFC2011. 10. 22. 20:55
가끔보면 폴더만 선택이 가능한 다이얼로그가 있는데
CFileDialog에 옵션줘서 하는줄 알았더니 -_-
SHBrowseForFolder() 라는 Win32API를 이용하는 것이었다!


void CtracerDlg::OnBnClickedButton1()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	ITEMIDLIST*  pildBrowse;
	TCHAR   pszPathname[MAX_PATH];
	BROWSEINFO  bInfo;
	memset(&bInfo, 0, sizeof(bInfo));
	bInfo.hwndOwner   = GetSafeHwnd();
	bInfo.pidlRoot   = NULL;
	bInfo.pszDisplayName = pszPathname;
	bInfo.lpszTitle   = _T("디렉토리를 선택하세요");
	bInfo.ulFlags   = BIF_RETURNONLYFSDIRS; 
	bInfo.lpfn    = NULL;
	bInfo.lParam  = (LPARAM)(LPCTSTR)"C:\\";
	bInfo.lParam  = (LPARAM)NULL;
	pildBrowse    = ::SHBrowseForFolder(&bInfo);
	if(pildBrowse)
	{
		SHGetPathFromIDList(pildBrowse, pszPathname);
		m_editPath.SetWindowTextW(pszPathname);
	}

}

[링크 : http://jeylee1031.tistory.com/entry/MFC-폴더-dialog-띄우기]
[링크 : http://softk.tistory.com/entry/SHBrowseForFolder-UI를-수정하자]
[링크 : http://msdn.microsoft.com/en-us/library/windows/desktop/bb762115(v=vs.85).aspx]

'Programming > C Win32 MFC' 카테고리의 다른 글

윈도우에서 사용할 임시파일이름 만들기  (0) 2011.10.24
CFileFind Class  (0) 2011.10.23
ctime()  (2) 2011.07.06
선언과 정의(Declaration & Definition)  (10) 2010.10.04
ini 파일 내용 파싱하기  (2) 2010.09.27
Posted by 구차니
Programming/C Win32 MFC2011. 7. 6. 18:28
time_t는 32bit(4byte) 의 데이터이고
1970년 1월 1일 부터의 epoch를 기준으로 저장을 한다.
특정값을 넣어서 테스트 해보는 샘플 코드는 아래와 같다.

/* ctime example */
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t rawtime = 0x45984f00;

//  time ( &rawtime );
  printf ( "The current local time is: %s", ctime (&rawtime) );

  return 0;
} 

머 결과는 아래와 같이
$ ./a.out
The current local time is: Mon Jan  1 09:00:00 2007 

엑셀에서 계산해보니
1167609600  19460160    324336    13514   37.02465753
                   /60         /60         /24      /365

1970년 부터 epoch 이므로
37년 후인 2007년이 대충 맞는듯! 

[링크 : http://www.cplusplus.com/reference/clibrary/ctime/ctime/]
[링크 : http://linux.die.net/man/3/ctime]

'Programming > C Win32 MFC' 카테고리의 다른 글

CFileFind Class  (0) 2011.10.23
CFileDialog 말고 폴더 다이얼로그 없나?  (0) 2011.10.22
선언과 정의(Declaration & Definition)  (10) 2010.10.04
ini 파일 내용 파싱하기  (2) 2010.09.27
WinMain 과 DllMain  (0) 2010.09.09
Posted by 구차니
Programming/C Win32 MFC2010. 10. 4. 18:04
한글로 번역이 잘못된건지 한글로는 모호하지만,
일단 정의(Definition)는 말그대로 어떠한 것을 정의"" 한다.
실제로 구체화/구현되지 않고, 설계도 라던가 단순하게 알려주는 역활을 한다.
하지만, 선언은 구체화를 한다. (메모리상에 자리를 차지한다)

그래서 우리가 변수를 만들때 "선언" 한다고 하고
구조체를 만들때 "정의" 한다고 했던 것이다.

[링크 : http://dstein.egloos.com/2563434]
[링크 : http://rookiecj.tistory.com/24]
[링크 : http://www.crazyowl.com/755]


----
으아아.. 지금보니 거꾸로 한게 맞네 ㅠ.ㅠ
딱다구리님 죄송합니다 ㅠ.ㅠ 

'Programming > C Win32 MFC' 카테고리의 다른 글

CFileDialog 말고 폴더 다이얼로그 없나?  (0) 2011.10.22
ctime()  (2) 2011.07.06
ini 파일 내용 파싱하기  (2) 2010.09.27
WinMain 과 DllMain  (0) 2010.09.09
수직탭이 모야? (what is the Vertical tab?)  (4) 2010.07.19
Posted by 구차니