반응형

C언어의 대표적 함수 scanf 의 함수는 다음과 같은 형태를 가지고 있다.


int scanf (const char * format, ...);


사용 예는 다음과 같다.


scanf("%d", &input);


위 글은 숫자형을 입력받을때 사용하는 방식이다.


Visual Studio 2008 기준 전체 코드를 간단히 짜보면  다음과 같다.


#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])

{

int input;

scanf("%d", &input);

printf("%d\n", input);

return 0;

}


숫자값을 입력받고, 숫자값을 출력하는 코드이다.
실행시켜보면 다음과 같이 표출되는것을 확인할 수 있다.






반응형

C 언어에서 Bit 단위로 변수를 지정하고 싶은 경우, Bit Field 라는 기능을 사용한다


기본적인 선언 방법은 다음과 같다.


struct bitField {

BYTE bit1:1;

BYTE bit2:1;

BYTE bit3:1;

BYTE bit4:1;

BYTE bit5:1;

BYTE bit6:1;

}


이와 같이 선언하면 1Byte 에 6개의 변수로 각각 1bit 까지의 데이터를 사용할 수 있다.

1bit 이므로, 0과 1만 입력이 가능하며, 2를 입력하게 되면 앞 비트를 침범하게 된다.


bitField.bit1 = 2; 


이와 같이 데이터값을 셋팅하면, 2의 binary 값은 10 이므로 bitField.bit1 는 0, bitFile.bit2 는 1이 셋팅되게 된다.


bit 단위로 데이터를 저장하거나,  bit 단위의 프로토콜 데이터를 사용하면 상당히 유용한 기능이다.

나는 bit 단위로 정보를 잘라서 전송해야 하는 CAN 프로토콜 사용시 유용하게 사용하였다.


비트필드의 선언 변수형은 C 언어의 모든 변수형이 사용이 가능하며, unsigned 형 변수로 사용하지 않는다면 상당한 주의가 필요하다. 



'Computer Programming > C,C++,MFC' 카테고리의 다른 글

[C]LineDraw - 브레젠험 알고리즘  (0) 2021.06.29
[C/C++] C언어 입력함수 scanf  (0) 2017.02.15
[C/C++] fopen 함수의 옵션값 정리  (0) 2016.11.10
[C/C++] bsearch 함수  (0) 2016.06.22
[MFC]CString <-> Char* 변환  (0) 2013.11.08
반응형

fopen 함수를 종종 쓸일이 생기는데, 매번쓰는 옵션값 외에는 헷갈리기에 정리해 보았다.


fopen 함수는 파일 입출력을 위한 함수로 다음과 같이 사용할 수 있다.


FILE *fp = NULL;

//우선 파일 포인터로 사용할 변수를 선언하고, 
//경로와 모드값으로 파일을 오픈한뒤 파일포인터에 넣는다.
//fopen 함수의 형태는 다음과 같다.

//FILE *fopen(const char *filename, const char *mode);

fp = fopen("test.txt", "wb");

그리고 위에 fopen Mode 값으로 사용할 수 있는 값들은 다음과 같다.


r : Open for reading only. (읽기 전용)


w : Create for writing. If a file by that name already exists, it will be overwritten.

    (쓰기용으로 파일생성, 동일이름이 있다면 덮어씀.)


a : Append; open for writing at end-of-file or create for writing if the file does not exist.

    (동일명 파일 존재시 끝에 이어씀, 동일명 파일 없으면 쓰기용 파일 생성)


r+ : Open an existing file for update (reading and writing).

    (현재 있는 파일에 read/write 모두 덮어씀.)


w+ : Create a new file for update (reading and writing). 

      If a file by that name already exists, it will be overwritten.

    (읽기/쓰기용으로 파일 생성. 같은 파일 존재시 덮어)


a+ : Open for append; open (or create if the file does not exist) for update at the end of the file.

    (파일이있으면 뒤에 추가, 업다면 새로 생성)


t : Text Mode (텍스트 모드)


b : Binary Mode (이진 파일 모드)



'Computer Programming > C,C++,MFC' 카테고리의 다른 글

[C/C++] C언어 입력함수 scanf  (0) 2017.02.15
[C/C++] Bit Field, 비트 변수 ':'  (0) 2017.02.13
[C/C++] bsearch 함수  (0) 2016.06.22
[MFC]CString <-> Char* 변환  (0) 2013.11.08
[C/C++]OpenSSL Library 사용을 위해  (0) 2013.10.15
반응형

c++의 bsearch 함수는 이진검색을 하는 함수이다.

이진검색을 하기 위해서 자료는 반드시 정렬되어 있어야 한다.


c++의 bseacrh는 다음과 같이 사용할 수 있다.

bsearch 할 데이터의 구조에 맞게끔 compare 함수는 작성해야 한다.

(다양한 데이터 구조에서 사용할 수 있다.


셈플 코드는 다음과 같다.


int compare( const void *cmp1, const void *cmp2)

{

   return strcmp( (char *)cmp1, (char *)cmp2);

}


#define  SIZE_TABLE     10

#define  SIZE_ITEM      20


int main( void)

{

   char  table[SIZE_TABLE][SIZE_ITEM]  = { "com", "size", "aaaa", "bbbb", "cccc", "dddd"};

   char *ptr;


   ptr   = (char *)bsearch( "size", table, SIZE_TABLE, SIZE_ITEM, compare);

   printf( "find chracter = %sn", ptr);

  

   return 0;

}



반응형
작업할때마다 까먹어서 추가!! 꼭 까먹을만하면 다시 사용하게 되는군요 ㅎ

CString char2CString(char* inp)

{

int len;

CString str;

BSTR buf;


len = MultiByteToWideChar(CP_ACP, 0, inp, (int)strlen(inp), NULL, NULL);

buf = SysAllocStringLen(NULL, len);

MultiByteToWideChar(CP_ACP, 0, inp, (int)strlen(inp), buf, len);

str.Format(_T("%s"), buf);


return str;

}



char* CString2char(CString& str)

{

long len = str.GetLength();

len = len*2;

char* szTemp = new char[len+1];

memset(szTemp, 0, len+1);

USES_CONVERSION;

strcpy(szTemp, T2A(str));


return szTemp;

}

반응형


openssl-0.9.8k.tar.gz


# 다운 받는 경로 

http://www.openssl.org/source/


# Windows 상에서 OpenSSL Library 사용을 위해 필요한 OpenSSL 파일 -> 수많은 OpenSSL 파일들이 존재..

반응형

하면됨..


DWORD CMapInstallerDlg::getFileLengthFromHttp(CString url)

{

DWORD filesize;

TCHAR szCause[255];

CString CauseOfError;

TRY 

{

CInternetSession session;

CHttpFile *remotefile = (CHttpFile*)session.OpenURL(url,1,INTERNET_FLAG_TRANSFER_BINARY);

TCHAR szContentLength[32];

DWORD dwInfoSize = 32;

DWORD dwFileSize = 0;

BOOL bGetFileSize = FALSE;

if(remotefile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, szContentLength, &dwInfoSize, NULL))

{

bGetFileSize = TRUE;

dwFileSize = (DWORD)_ttol(szContentLength)

filesize = dwFileSize;

}

else

{ // file nothing

filesize = -1;

}

remotefile->Close();

session.Close();

delete remotefile;

delete session;

}

CATCH_ALL(error)

{

AfxMessageBox("Error when find Data from Server");

error->GetErrorMessage(szCause,254,NULL);

CauseOfError.Format("%s",szCause);

AfxMessageBox(CauseOfError);

}

END_CATCH_ALL;

반응형

winninie.h include 후,

아래 코드 사용 하면됨 ㅎ


int getFileFromHttp(char* pszUrl, char* pszFile)

{

HINTERNET    hInet, hUrl;

DWORD        dwReadSize = 0;


// WinINet함수 초기화

if ((hInet = InternetOpen("MyWeb",            // user agent in the HTTP protocol

INTERNET_OPEN_TYPE_DIRECT,    // AccessType

NULL,                        // ProxyName

NULL,                        // ProxyBypass

0)) != NULL)                // Options

{

// 입력된 HTTP주소를 열기

if ((hUrl = InternetOpenUrl(hInet,        // 인터넷 세션의 핸들

pszUrl,                        // URL

NULL,                        // HTTP server에 보내는 해더

0,                            // 해더 사이즈

0,                            // Flag

0)) != NULL)                // Context

{

FILE    *fp;


// 다운로드할 파일 만들기

if ((fp = fopen(pszFile, "wb")) != NULL)

{

TCHAR    szBuff[READ_BUF_SIZE];

DWORD    dwSize;

DWORD    dwDebug = 10;


do {

InternetReadFile(hUrl, szBuff, READ_BUF_SIZE, &dwSize);

fwrite(szBuff, dwSize, 1, fp);


dwReadSize++;


if(dwReadSize % 100 == 0)

printf("[%d]\n", dwReadSize);

size_t szFullSize = 766400;

UPDATE("Downloading...", (int)dwReadSize, 766400, true);

} while ((dwSize != 0) || (--dwDebug != 0));


fclose( fp );

}

InternetCloseHandle(hUrl);

}

InternetCloseHandle(hInet);

}

return(dwReadSize);

}



+ Recent posts