'프로그래밍'에 해당되는 글 10건
- [TDI_FW] 예제 분석 5월 18일 2010.05.18
- 경과 시간 계산 및 일정시간이상 일정 범위 안의 좌표에 있으면 클릭 (2) 2010.02.20
- MFC에서 Client 중복 실행 방지하는 방법 (1) 2010.02.19
- C언어의 간단한 예제를 설계부터 코드화까지 (4/9) (3) 2009.12.28
- C언어의 간단한 예제를 설계부터 코드화까지 (3/9) (2) 2009.12.09
- 한글로 코딩하는 [한글 베이직 2.0] 동영상 (2) 2009.08.25
- C언어의 간단한 예제를 설계부터 코드화까지 (2/9) (12) 2009.08.20
- CPP에서 MD5 암호화 하기 (2) 2009.08.19
- 입문자를 위한 책 추천 (6) 2009.07.14
- 프로그래밍을 시작하시려는 분들에게 (8) 2009.07.13
[TDI_FW] 예제 분석 5월 18일[TDI_FW] 예제 분석 5월 18일
Posted at 2010. 5. 18. 20:09 | Posted in About Programing/04. Device Driver- OpenSCManager() : 서비스를 생성하거나 제거, 중지 등의 일을 하기 위해서 사전에 사용하는 서비스 컨트롤 관리자(Service Control Manager) 핸들을 얻는 함수다.
- OpenService() : 기존에 생성한 서비스 핸들을 얻는 함수다. 디바이스 드라이버 서비스를 생성하기 전에 이 함수를 먼저 사용하여 드라이버를 위한 서비스가 이미 생성되어 있느닞를 알아보는 용도로 사용한다.
- CreateService() : 서비스를 생성하는 목적으로 사용하는 함수다.
- StartService() : 서비스를 실행하는 목적으로 사용하는 함수다. NT 구형(Legacy) 드라이버를 위한 서비스는 이와 같은 함수를 응용 프로그램이 직접 호출함으로써 드라이버를 메모리에 적재할 수 있다. 그러나 WDM 드라이버는 디바이스 스택형성 과정을 위해서 메모리에 적재되므로 이 함수를 사용하지 않는다.
- ControlService() : 동작 중인 서비스에 특정 명령을 전달하는 목적으로 사용하는 함수다.
- DeleteService() : 생성된 서비스를 제거하는 용도로 사용하는 함수다.
- CloseServiceHandle() : 사용하던 서비스 핸들, SCM 핸들을 반납하는 용도로 사용하는 함수다.
'About Programing > 04. Device Driver' 카테고리의 다른 글
SDT 수정을 이용한 Native API Hooking (0) | 2010.07.28 |
---|---|
WinDbg 명령어 정리 (0) | 2010.06.14 |
완전 신기! (0) | 2010.05.23 |
5월 22일 SOURCES 파일 (0) | 2010.05.23 |
[TDI_FW] 예제 분석 5월 19일 (0) | 2010.05.20 |
[TDI_FW] 예제 분석 5월 18일 (0) | 2010.05.18 |
경과 시간 계산 및 일정시간이상 일정 범위 안의 좌표에 있으면 클릭경과 시간 계산 및 일정시간이상 일정 범위 안의 좌표에 있으면 클릭
Posted at 2010. 2. 20. 02:52 | Posted in Project/증강현실을 이용한 사천성
경과 시간 계산은 크게 어렵지 않았다.
void PlayGameForm::OnBnClickedButtonStart() { this->tStartTime = CTime::GetCurrentTime(); // 현재 시간을 얻어온다. SetTimer(TIMER, 1000, NULL); // 1초마다 호출한다. this->cameraManager->Create(ComparePoint, this->cameraManager); this->cameraManager->threadState = true; } void PlayGameForm::OnTimer(UINT_PTR nIDEvent) { if (nIDEvent == CAMERA) { this->cameraManager->GetCamera().cvQueryFrame_ipl_OriginalImage(); this->cameraManager->FindRedColor (); } if (nIDEvent == TIMER) { this->Timer(); } CDialog::OnTimer(nIDEvent); } void PlayGameForm::Timer () { this->tCurrentTime = CTime::GetCurrentTime(); // 현재 시간을 얻어온다. this->tViewTime = this->tCurrentTime - this->tStartTime; // 차를 구한다. this->cHours.Format("%d : ", this->tViewTime.GetHours()); // 시간 추출 this->cMinutes.Format("%d : ", this->tViewTime.GetMinutes()); // 분 추출 this->cSeconds.Format("%d", this->tViewTime.GetSeconds()); // 초 추출 this->cViewTime = this->cHours + this->cMinutes + this->cSeconds; // 추출한 시, 분, 초 합치기 this->m_timer.SetWindowTextA((LPCTSTR)(this->cViewTime)); // 출력 }
문제는 화면에서 붉은색이 일정 시간 멈춰 있을때 이벤트를 발생 시키는 것인데,
Thread를 사용해서 이진화된 영상 자체에 접근했다가
동기화 문제로 고생고생 하다가
결국은 이진화 할때마다 사진으로 저장하고, 그 사진 파일을 이용해서
비교하는 방법을 선택하였다.
DWORD ComparePoint(LPVOID param) { CameraManager *cameraManager = (CameraManager*) param; int i = 0; int j = 0; int counter = 0; CString directory, fileName; IplImage *ipl_gray_Image; IplImage *temp_ipl_gray_Image; directory.Format("Image\\"); fileName.Format("grayImage.jpg"); while (TRUE) { ipl_gray_Image = cvLoadImage(directory+fileName, CV_LOAD_IMAGE_UNCHANGED); if (ipl_gray_Image != NULL) { // Before Point중심 구하기 Start cameraManager->beforePoint = cvPoint (0, 0); counter = 0; for (i = 0 ; i < ipl_gray_Image->height ; i++) { for (j = 0 ; j < ipl_gray_Image->widthStep ; j++) { if ((ipl_gray_Image->imageData[i * ipl_gray_Image->widthStep + j]) != 0) { cameraManager->beforePoint.x += j; cameraManager->beforePoint.y += i; counter++; } } } if (counter != 0) { cameraManager->beforePoint.x = cameraManager->beforePoint.x / counter; cameraManager->beforePoint.y = cameraManager->beforePoint.y / counter; } // Before Point중심 구하기 End temp_ipl_gray_Image = cvLoadImage(directory+fileName, CV_LOAD_IMAGE_UNCHANGED); if (temp_ipl_gray_Image != NULL) { // After Point중심 구하기 Start cameraManager->afterPoint = cvPoint (0, 0); counter = 0; for (i = 0 ; i < temp_ipl_gray_Image->height ; i++) { for (j = 0 ; j < temp_ipl_gray_Image->widthStep ; j++) { if ((temp_ipl_gray_Image->imageData[i * temp_ipl_gray_Image->widthStep + j]) != 0) { cameraManager->afterPoint.x += j; cameraManager->afterPoint.y += i; counter++; } } } if (counter != 0) { cameraManager->afterPoint.x = cameraManager->afterPoint.x / counter; cameraManager->afterPoint.y = cameraManager->afterPoint.y / counter; } // After Point중심 구하기 End // Befor Point와 After Point 차이 구하기 Start cameraManager->comparePoint = cvPoint(0, 0); counter = 0; cameraManager->comparePoint.x = abs(cameraManager->afterPoint.x - cameraManager->beforePoint.x); cameraManager->comparePoint.y = abs(cameraManager->afterPoint.y - cameraManager->beforePoint.y); // Befor Point와 After Point 차이 구하기 End // 비교해서 Event 발생 if (cameraManager->comparePoint.x < CLICK_X || cameraManager->comparePoint.y < CLICK_Y) { if (cameraManager->frameCounter > FRAMECOUNTER) { AfxMessageBox("클릭"); cameraManager->frameCounter = 0; } } else { cameraManager->frameCounter = 0; } } cvReleaseImage( &(ipl_gray_Image) ); cvReleaseImage( &(temp_ipl_gray_Image) ); } } cameraManager->threadState = false; return FALSE; }
'Project > 증강현실을 이용한 사천성' 카테고리의 다른 글
OpenGL을 이용한 Picking 성공 (5) | 2010.02.24 |
---|---|
증강현실을 MFC로 이식 성공 (2) | 2010.02.23 |
경과 시간 계산 및 일정시간이상 일정 범위 안의 좌표에 있으면 클릭 (2) | 2010.02.20 |
빨강 추적 (1) | 2010.02.19 |
영상 속도가 느린 이유 (0) | 2010.02.18 |
영상처리를 이용한 붉은색 검출 (8) | 2010.02.17 |
-
이준재안녕하세요. 숙신님.
저는 현재 대학교에서 재학중인 컴퓨터공학과 학생입니다.
다름이 아니라 현재 제가 간단한 웹브라우저를 MFC로 만들고 있습니다.
여기서 구현하려고 하는게 현재 시간과 브라우저를 시작하고 난뒤
경과시간 2가지를 상태바에다가 구현하려고 하는데요.
지금 현재시간은 구현을 하였는데요.
경과시간은 아직 구현을 못하였습니다.
죄송하지만 어떻게 해야될지 조금 알려주시면 안되겠습니까?
MFC에서 Client 중복 실행 방지하는 방법MFC에서 Client 중복 실행 방지하는 방법
Posted at 2010. 2. 19. 15:52 | Posted in About Programing/03. TipBOOL CARPuzzleApp::InitInstance() { CheckOverlapRun (); return FALSE; } void CARPuzzleApp::CheckOverlapRun () { CWnd* pWnd = NULL; pWnd = CWnd::FindWindow(NULL, _T("사천성 ver 0.5 - Title")); if(pWnd) // 중복 실행이 되었을 경우 { // 중복 실행 중인 프로그램 화면에 표시 pWnd->ShowWindow(SW_SHOW); pWnd->SetForegroundWindow(); } else { // 레지스트리 등록 ::GetClassInfo(AfxGetInstanceHandle(), "#32770", &wc); wc.lpszClassName = "사천성 ver 0.5 - Title"; AfxRegisterClass(&wc); INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinAppEx::InitInstance(); AfxEnableControlContainer(); SetRegistryKey(_T("로컬 응용 프로그램 마법사에서 생성된 응용 프로그램")); CARPuzzleDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { } else if (nResponse == IDCANCEL) { } } } int CARPuzzleApp::ExitInstance() { // 레지스터리 해제 UnregisterClass("사천성 ver 0.5 - Title", wc.hInstance); return CWinAppEx::ExitInstance(); }
'About Programing > 03. Tip' 카테고리의 다른 글
MFC Dialog 꽉찬 화면 (0) | 2010.02.20 |
---|---|
MFC Dialog 에서 Enter 와 ESC Key 종료 방지 (0) | 2010.02.20 |
MFC에서 Client 중복 실행 방지하는 방법 (1) | 2010.02.19 |
API Hooking (0) | 2010.01.30 |
TISTORY에서 내가 작성한 소스 예쁘게 올리기 (2) | 2009.08.19 |
CPP에서 MD5 암호화 하기 (2) | 2009.08.19 |
-
크리티컬 섹션을 이용해서도 구현할 수도 있지 않을까?
내가 MFC는 잘모르겠지만 위의 코드를 보면 타이틀바의 이름을 갖고 CWnd객체를 얻어 오는 것 같은데,
혹시 너네 프로그램 말고 다른 프로그램이 이름이 사천성 ver 0.5 - Title 면 어떻하지?
그리고 너네 프로그램이 사천성 ver 0.5 - Title에서 다른 것으로 바뀌면?
C언어의 간단한 예제를 설계부터 코드화까지 (4/9)C언어의 간단한 예제를 설계부터 코드화까지 (4/9)
Posted at 2009. 12. 28. 15:52 | Posted in About Programing/02. 준비운동1-100 까지의 홀수 합을 구하시오.(단, 3의 배수와 5의 배수 제외)
1. System chart
2. 수작업의 이해
숫자 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
… |
홀수판단 |
○ |
× |
○ |
× |
○ |
× |
○ |
… |
3의 배수가 아닌가 |
○ |
○ |
× |
○ |
○ |
× |
○ |
… |
5의 배수가 아닌가 |
○ |
○ |
○ |
○ |
× |
○ |
○ |
… |
합 |
1 |
1 |
1 |
1 |
1 |
1 |
8 |
… |
1. 100번 반복한다.
1.1 수를 센다.
1.2 홀수인지 판단한다.
1.2.1 3의 배수인지 판단한다.
1.2.2 5의 배수인지 판단한다.
1.2.3 합을 구한다.
2. 합을 출력한다.
3. 끝낸다.
number |
입력받을 숫자 |
정수형 |
plus |
양수 count |
정수형 |
odd |
음수 count |
정수형 |
even |
짝수 count |
정수형 |
minus |
홀수 count |
정수형 |
remainder |
나머지 |
정수형 |
i |
반복제어변수 |
정수형 |
5. NS-Chart
6. NS-Chart 검토표
|
초기 |
|
|
|
|
|
|
|
|
number |
? |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
… |
sum_odd |
0 |
1 |
|
|
|
|
|
8 |
… |
tree_remainder |
? |
1 |
|
0 |
|
2 |
|
1 |
… |
five_remainder |
? |
1 |
|
3 |
|
0 |
|
2 |
… |
remainder |
? |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
… |
i |
? |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
… |
7. 소스화
#include <stdio.h> #define MAX 100 typedef unsigned short UShort; UShort GetSumOdd (void); void Display (UShort sum_odd); int main (int argc, char *argv[]) { UShort sum_odd; sum_odd = GetSumOdd ( ); Display (sum_odd); return 0; } UShort GetSumOdd (void) { UShort sum_odd = 0; UShort number, tree_remainder, five_remainder, remainder, i; for(i=1 ; i <= MAX ; i++) { number = i; remainder = number % 2; if(remainder==1) { tree_remainder = number % 3; five_remainder = number % 5; if(tree_remainder != 0 && five_remainder != 0) { sum_odd += number; } } } return sum_odd; } void Display (UShort sum_odd) { printf ("%d\n", sum_odd); }
8. 결과
'About Programing > 02. 준비운동' 카테고리의 다른 글
C언어의 간단한 예제를 설계부터 코드화까지 (4/9) (3) | 2009.12.28 |
---|---|
C언어의 간단한 예제를 설계부터 코드화까지 (3/9) (2) | 2009.12.09 |
C언어의 간단한 예제를 설계부터 코드화까지 (2/9) (12) | 2009.08.20 |
C언어의 간단한 예제를 설계부터 코드화까지 (1/9) (2) | 2009.07.15 |
C언어의 간단한 예제를 설계부터 코드화까지 (3/9)C언어의 간단한 예제를 설계부터 코드화까지 (3/9)
Posted at 2009. 12. 9. 16:34 | Posted in About Programing/02. 준비운동[문제 3/9]
100 장의 카드에 숫자가 입력될 때 양수의 개수와 음수의 개수를 구하고 양수 중에서 홀수와 짝수의 개수도 구하시오.
1. System chart
main 함수에서 *100 이라고 표시되어있는, 자기 자신을 가리키는 화살표는, 숫자만큼 반복한다는 뜻입니다.
입력 수 |
1 |
2 |
3 |
-1 |
-2 |
-3 |
… |
양수 |
1 |
2 |
3 |
× |
× |
× |
… |
홀수 |
1 |
× |
2 |
× |
× |
× |
… |
짝수 |
× |
1 |
× |
× |
× |
× |
… |
음수 |
× |
× |
× |
1 |
2 |
3 |
… |
1. 100번 반복한다.
1.1 숫자를 입력받는다.
1.2 0인지 판단한다.
1.2.1 양수, 음수를 판단한다.
1.2.1.1 양수, 음수를 세린다.
1.2.1.2 짝수, 홀수를 판단한다.
1.2.1.2.1 짝수, 홀수를 세린다.
2. 양수, 음수, 홀수, 짝수의 개수를 출력한다.
3. 끝낸다.
4. 자료명세서
number |
입력받을 숫자 |
정수형 |
plus |
양수 count |
정수형 |
odd |
음수 count |
정수형 |
even |
짝수 count |
정수형 |
minus |
홀수 count |
정수형 |
remainder |
나머지 |
정수형 |
i |
반복제어변수 |
정수형 |
홀수와 짝수를 구분하는 기준은, 2로 나누었을때 나머지가 1이냐, 아니냐 라는 것은 누구나 알고있을 것입니다. 2/9번 문제에서 설명하였듯이, NS-Chart 에서는 %연산자가 없습니다. 그래서 반복문을 사용하여, 2로 계속 빼는 것입니다.
6. NS-Chart 검토표
|
초기값 |
|
|
|
|
|
number |
? |
0 |
1 |
-1 |
2 |
… |
plus |
0 |
0 |
1 |
0 |
2 |
… |
odd |
0 |
0 |
1 |
0 |
0 |
… |
i |
? |
1 |
2 |
3 |
4 |
… |
even |
0 |
0 |
0 |
0 |
1 |
… |
minus |
0 |
0 |
0 |
1 |
1 |
… |
reaminder |
? |
? |
1 |
1 |
0 |
… |
7. 소스화
#include <stdio.h> #define MAX_INPUT_NUMBER 100 typedef signed long int SLong; typedef unsigned short int UShort; SLong InputNumber (void); void Grouping (SLong number, UShort *plus, UShort *minus, UShort *odd, UShort *even); void Display (UShort plus, UShort minus, UShort odd, UShort even); int main (int argc, char *argv[]) { SLong number; UShort plus = 0; UShort minus = 0; UShort odd = 0; UShort even = 0; UShort i; for (i=1 ; i<=MAX_INPUT_NUMBER ; i++) { number = InputNumber ( ); Grouping (number, &plus, &minus, &odd, &even); } Display (plus, minus, odd, even); return 0; } SLong InputNumber (void) { SLong number; scanf("%d", &number); return number; } void Grouping (SLong number, UShort *plus, UShort *minus, UShort *odd, UShort *even) { UShort remainder; if(number != 0) { if(number > 0) { (*plus)++; remainder = number%2; if(remainder==1) { (*odd)++; } else { (*even)++; } } else { (*minus)++; } } } void Display (UShort plus, UShort minus, UShort odd, UShort even) { printf("양수 : %d개\n", plus); printf("홀수 : %d개\n", odd); printf("짝수 : %d개\n", even); printf("음수 : %d개\n", minus); }
8. 결과
이번 문제는, 사용자로부터 숫자를 입력받는 형식이라, 결과 화면을 따로 표시하지 않겠습니다.
언제 숫자 100개를 다 입력하냐고 불평 하시는 분들은, 소스코드에서
#define MAX_INPUT_NUMBER 100
부분에서 숫자를, 테스트하기 적당한 숫자로 바꿔주시면 될것입니다.
'About Programing > 02. 준비운동' 카테고리의 다른 글
C언어의 간단한 예제를 설계부터 코드화까지 (4/9) (3) | 2009.12.28 |
---|---|
C언어의 간단한 예제를 설계부터 코드화까지 (3/9) (2) | 2009.12.09 |
C언어의 간단한 예제를 설계부터 코드화까지 (2/9) (12) | 2009.08.20 |
C언어의 간단한 예제를 설계부터 코드화까지 (1/9) (2) | 2009.07.15 |
한글로 코딩하는 [한글 베이직 2.0] 동영상한글로 코딩하는 [한글 베이직 2.0] 동영상
Posted at 2009. 8. 25. 01:40 | Posted in About Programing/01. 시작하기 전에농담삼아서
"순수 한글로만 코딩이 가능하다면 재미있지 않겠니"
라고 했더니 떡하니 DC 프로그래밍 갤러리에 링크가 올라왔다-_-
모르는 사람이 본다면 뭐 저런 고대의 프로그램이 있나 라고 할지도 모르겠지만,
조금이라도 프로그래밍에 대해서 아는 사람이 본다면
진짜 입이 떡 벌어질 것이다.
정말 대단하다.
어떻게 저런걸...
'About Programing > 01. 시작하기 전에' 카테고리의 다른 글
StarUML에서 ERD 그리는 방법 (5) | 2009.11.24 |
---|---|
한글로 코딩하는 [한글 베이직 2.0] 동영상 (2) | 2009.08.25 |
파일입출력을 이용하여 여자를 유혹하여 보자. (6) | 2009.08.23 |
입문자를 위한 책 추천 (6) | 2009.07.14 |
프로그래밍을 시작하시려는 분들에게 (8) | 2009.07.13 |
C언어의 간단한 예제를 설계부터 코드화까지 (2/9)C언어의 간단한 예제를 설계부터 코드화까지 (2/9)
Posted at 2009. 8. 20. 00:57 | Posted in About Programing/02. 준비운동1부터 100,000 사이에 (100,000포함) 7의 배수가 몇 개 있는지 구하시오.
1. System chart
C프로그래밍을 몇번 해보신 분이라면, 왜 단순 출력만 해주는 Display라는 함수를 따로 만들어야 되는지 의문을 가지실 겁니다. 그냥 main 함수에서 출력해주는게 쉽지 않냐고 말씀하실수도 있습니다.
하지만, 지금부터 연산부분과 출력부분(Form부분)을 분리해서 코딩하는 습관을 들여놓으시면, 나중에 편하실겁니다. 여러가지 장점이 있지만, 제가 느낀 가장 큰 장점은 다른언어로 옮길때 엄청난 편의가 있다는 점입니다.
2. 수작업의 이해
숫자 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ... |
7의배수 | X | X | X | X | X | X | ○ | ... |
count | 0 | 0 | 0 | 0 | 0 | 0 | 1 | ... |
3. 처리 과정
1. 100,000번 반복한다.
1.1 수를 세린다.
1.2 7의 배수를 세린다.
2. 7의 배수의 수를 출력한다.
3. 끝낸다.
4. 자료명세서
number
숫자
정수형
seven_doublenumber_count
7의 배수 Count
정수형
remainder
나머지
정수형
i
반복제어변수
정수형
5. NS-Chart
6. NS-Chart 검토표
초기값 | |||||||||
number | ? | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ... |
seven_doublenumber_count | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | ... |
remainder | ? | 1 | 2 | 3 | 4 | 5 | 6 | 0 | ... |
i | ? | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ... |
초기값 부분에 ?로 표시되어 있는 부분은, 초기화가 되지 않아서 쓰레기값이 있다는걸 표시합니다.
7. 소스화
#include <stdio.h> #define DOUBLE_NUMBER 7 typedef unsigned long int UShort; UShort GetSevenDoubleNumberCount (UShort seven_numberdouble_count); void Display (UShort seven_numberdouble_count); int main (int argc, char *argv[]) { UShort seven_numberdouble_count = 0; seven_numberdouble_count = GetSevenDoubleNumberCount(seven_numberdouble_count); Display(seven_numberdouble_count); return 0; } UShort GetSevenDoubleNumberCount (UShort seven_numberdouble_count) { UShort i; UShort number = 1; UShort remainder; for(i=1 ; i<=100000 ; i++) { number = i; remainder = number % DOUBLE_NUMBER; if(remainder == 0) { seven_numberdouble_count++; } } return seven_numberdouble_count; } void Display (UShort seven_numberdouble_count) { printf("7의 배수 : %d개\n", seven_numberdouble_count); }
8. 결과
'About Programing > 02. 준비운동' 카테고리의 다른 글
C언어의 간단한 예제를 설계부터 코드화까지 (4/9) (3) | 2009.12.28 |
---|---|
C언어의 간단한 예제를 설계부터 코드화까지 (3/9) (2) | 2009.12.09 |
C언어의 간단한 예제를 설계부터 코드화까지 (2/9) (12) | 2009.08.20 |
C언어의 간단한 예제를 설계부터 코드화까지 (1/9) (2) | 2009.07.15 |
-
-
-
방명록이 열려있지 않은것 같아 여기다 쓰고 가네요ㅎㅎㅎㅎ; 에공[..] 테터툴즈끼리인데 뭐 어떻게 안되려나<...말이죠 ㅋㅋ
-
-
-
2009.12.10 08:28 신고 [Edit/Del]우와+_+
신기한 방법 입니다만,
갯수에서 2개가 더 많이 나오네요 ㅋ
이렇게 구한 값에 2를 빼면 돼지 않냐고
말씀하실수도있지만,
그럼 문제의 본질적인 개념에서 좀 벗어나는
느낌입니다 ㅋ
그래도 흥미로운 방법 제시해주신건 감사합니다^-^ㅋ
-
-
-
2009.12.10 19:21 신고 [Edit/Del]헉...ㅠ
제가 혹시나 해서 다른분들이 같은 문제 풀어놓으신것도
확인을 했는데요ㅠ
14285 개가 맞습는걸로 생각됩니다ㅠ
이거, 일일히 세려볼수도없고;;ㅋ
-
CPP에서 MD5 암호화 하기CPP에서 MD5 암호화 하기
Posted at 2009. 8. 19. 00:54 | Posted in About Programing/03. Tip소스제공 : 빵원군
1. 소스
// MD5Test.cpp #ifdef HAVE_CONFIG_H #include <config.h> #endif #include "md5.h" #include <iostream> #include <cstdlib> #include <string> using namespace std; string md5(const string strMd5) { md5_state_t state; md5_byte_t digest[16]; char hex_output[16*2 + 1]; int di; md5_init(&state); md5_append(&state, (const md5_byte_t *)strMd5.c_str(), strMd5.length()); md5_finish(&state, digest); for (di = 0; di < 16; ++di) { sprintf(hex_output + di * 2, "%02x", digest[di]); } return hex_output; } int main(int argc, char *argv[]) { cout << md5("1234") << endl; return EXIT_SUCCESS; }
2. 결과
3. 용도
제로보드 사용시에, 회원 패스워드가 암호화 되어서 DB에 저장됩니다.
만약, 제로보드 자체 로그인이 아닌, 작성한 프로그램에서 로그인 기능을 만들고 싶다면, DB에서 회원 ID를 불러와 대조하는건 가능한데, 패스워드를 어떻게 대조해야 될지 막막하실겁니다.
이때, 제로보드에서 패스워드를 암호화 하는방식인 MD5를 사용하여, 사용자로 부터 입력받은 패스워드를 암호화 하여, DB에 있는 패스워드와 대조하면 됩니다.
'About Programing > 03. Tip' 카테고리의 다른 글
MFC Dialog 꽉찬 화면 (0) | 2010.02.20 |
---|---|
MFC Dialog 에서 Enter 와 ESC Key 종료 방지 (0) | 2010.02.20 |
MFC에서 Client 중복 실행 방지하는 방법 (1) | 2010.02.19 |
API Hooking (0) | 2010.01.30 |
TISTORY에서 내가 작성한 소스 예쁘게 올리기 (2) | 2009.08.19 |
CPP에서 MD5 암호화 하기 (2) | 2009.08.19 |
-
-
2009.10.10 14:42 신고 [Edit/Del]네, 쓰입니다^-^
근데 어차피 회원가입을 했을때
암호를 저장하기 위하여 사용한것이기때문에
님이 말씀하신 네트워크랑도 어느정도 비슷하네요^-^ㅋ
-
입문자를 위한 책 추천입문자를 위한 책 추천
Posted at 2009. 7. 14. 01:51 | Posted in About Programing/01. 시작하기 전에단점 : 쉽게 쉽게 설명하다 보니, 잘 하시는 분들이 볼땐 사알짝 개념적으로 엇난 부분도 있다고 함.
(나는 잘 모르겠음)
있음.
단점 : 글쎄...다른 책은 본적이 없어서...
단점 : 가끔 별 의미가 없다고 생각되는 예제가 있음.
단점 : 비싼 가격. MSDN을 번역해 놓은랑 다를바 없어서, MSDN 사용이 익숙해지면 거의 안봄.
제가 여태 보면서 공부했던 책입니다.
장점과 단점은 지극히 제 주관적인 입장에서 작성한 것임을 알려드립니다.
다른 견해가 있거나, 더 좋은 책이 있다면 태클 환영합니다^-^
'About Programing > 01. 시작하기 전에' 카테고리의 다른 글
StarUML에서 ERD 그리는 방법 (5) | 2009.11.24 |
---|---|
한글로 코딩하는 [한글 베이직 2.0] 동영상 (2) | 2009.08.25 |
파일입출력을 이용하여 여자를 유혹하여 보자. (6) | 2009.08.23 |
입문자를 위한 책 추천 (6) | 2009.07.14 |
프로그래밍을 시작하시려는 분들에게 (8) | 2009.07.13 |
-
생각보다 몇권 없네요? 더 있으신거 아닌가요? ㅋ
저는 그냥 책은 많아가지고 -_-;; 그리 보지는 않았으면서 ㄷㄷ 다 보긴 봐야 하는데 ㅠㅠ
한 책을 깊게 파시는 타입이신가봐요?-
2009.07.19 23:59 신고 [Edit/Del]그냥 책을 잘 안봅니다^-^
주로 검색과 Tool 자체가 제공하거나, 회사가 제공하는 도움말을 많이 보는 편이라서요^-^
-
-
-
프로그래밍을 시작하시려는 분들에게프로그래밍을 시작하시려는 분들에게
Posted at 2009. 7. 13. 01:15 | Posted in About Programing/01. 시작하기 전에언어가 중요한게 아닙니다.
너 C 얼만큼 하냐, C++할줄 아냐, JAVA는 해봤냐, 요즘은 C#이 대세라더라
모두 중요하지 않습니다.
설계할줄 알고
내 생각을 구조화 시켜서 표현할줄 아는 능력이 중요한겁니다.
언어는
그러기 위한 도구일 뿐입니다.
라고 이야기 하는 저도 사실, 도구를 잘 다루고 싶은 욕망이 크긴 합니다.
잘 다루는 분들을 보면 부럽기도 하구요 ^-^
'About Programing > 01. 시작하기 전에' 카테고리의 다른 글
StarUML에서 ERD 그리는 방법 (5) | 2009.11.24 |
---|---|
한글로 코딩하는 [한글 베이직 2.0] 동영상 (2) | 2009.08.25 |
파일입출력을 이용하여 여자를 유혹하여 보자. (6) | 2009.08.23 |
입문자를 위한 책 추천 (6) | 2009.07.14 |
프로그래밍을 시작하시려는 분들에게 (8) | 2009.07.13 |
-
-
-
-
천재태도님~
제가 네이버에서 블로그를 새로 만들었는데....
아직 쓸 내용이 없어서... 천재태도님 글 몇개 쫌 가져갔습니다.
단, 천재태도님 블로그에서 가져왔음을 확실히 명시해놓았습니다.
그래도 혹시 삭제를 원하신다면, 당장 삭제하겠습니다.
그럼 수고하세요~^_^
p.s. "http://blog.naver.com/chic_at" 이웃 해요~~~~