// 헤더 선언 void LogWriteFormat(char *Msg, ...); // 본문 void LogWriteFormat(char *Msg, ...) { va_list Ap; char Buffer[1024]; memset(Buffer, 0 , sizeof(Buffer)); va_start(Ap, Msg); vsprintf(Buffer, Msg, Ap); va_end(Ap); // 이후 Buffer 를 이용하여 파일 또는 DB로 저장한다. }
C에서는 출력에 대해 데이타 타입에 의존해서 출력하게 됩니다. 그러한 것을 출력변환자라고 하는데요.. 요즘 새로운 언어들은 간단한 출력에 대해 그냥 문자열로 처리하는 경향이 있있는데.. 이런 타입에 의존한 출력변환자 사용이 C의 장점이자 단점이기도 합니다. 그럼 출력 변환자에 대해 전체적으로 살펴보면 '%d','%i' - 정수를 부호있는 십진수로 출력 '%o' - 정수를 부호없는 8진수로 출력 '%u' - 정수를 부호없는 10진수로 출력 '%Z' - 정수가 size_t 형태로 변환된 것으로 가정하여 정수를 부호없는 10진수로 출력 '%x','%X' - 정수를 16진수로 출력 '%f' - 부동소수점수를 정상적인(고정소수점) 표기로 출력 '%e','%E' - 부동소수점수를 지수 표기로 출력 ('%e'는 소문..
프로그램에서 메모리를 구분하는 방법은 컴파일러 제조사에 따라 조금씩 다르지만 대략 다음과 같이 4 종류의 세그먼트들로 나눕니다. 1. Code Segment : 프로그램 코드가 들어 있는 부분. 2. Data Segment : 전역 변수와 static 변수들이 저장되어 있는 부분 3. Stack Segment : 로컬 변수들이 저장되어 있는 부분 4. Heap Segment : free space로서 dynamic allocation 으로 메모리를 사용할수 있다. 스택 세그먼트는 함수나 프로시듀어에서 선언한 변수들-로컬변수-들을 저장하는 공간으로 함수가 시작되면 변수들이 스택 구조 형태로 차곡 차곡 메모리에 할당되어 사용되다가 함수가 종료되면 메모리 할당이 자동으로 해제되는 변수을 저장하는 공간 입니 다..
멤버 설명 tm_sec 초(0~59) tm_min 분(0~59) tm_hour 시간(0~23) tm_mday 날짜(1~31) tm_mon 월(0~11) tm_year 1990년 이후 경과 년수 tm_wday 요일(0~6). 0이 일요일 tm_yday 년중 날짜(0~365) tm_isdst 일광 절약 시간과의 차 time_t tm_time; struct tm *st_time; char buff[1024]; int month, year; time( &tm_time); st_time = localtime(&tm_time); // 월은 0 ~ 11이므로 +1 처리 month = st_time->tm_mon + 1; // 한달 전 month = month - 1; year = st_time->tm_year + 1..
UINT32 GetTickCount() { struct timeval gettick; gettimeofday(&gettick, NULL); return (gettick.tv_sec * 1000 + gettick.tv_usec / 1000) & 0xffff; } bool CheckTimeOver(unsigned int ms, unsigned int OldTime) { UINT32 timer = GetTickCount(); if (timer (UINT32) ms + OldTime); // 합산한 시간이 한바퀴 돌아버린 경우엔 시간이 경과한게 아님 }
// Char, Hex간 변환 void Char2Hex(unsigned char ch, char* szHex) { static unsigned char saucHex[] = "0123456789ABCDEF"; szHex[0] = saucHex[ch >> 4]; szHex[1] = saucHex[ch&0xF]; szHex[2] = 0; } //Function to convert a Hex string of length 2 to an unsigned char bool Hex2Char(char const* szHex, unsigned char& rch) { if(*szHex >= '0' && *szHex = 'A' && *szHex = '0' && *szHex
1. 보내는 쪽 // Char, Hex간 변환 void Char2Hex(unsigned char ch, char* szHex) { static unsigned char saucHex[] = "0123456789ABCDEF"; szHex[0] = saucHex[ch >> 4]; szHex[1] = saucHex[ch&0xF]; szHex[2] = 0; } void __fastcall TMainFrm::GetSignImage(char *Sign) { Graphics::TBitmap * pOpenBmp = new Graphics::TBitmap(); // 이거 나중에 delete해야 함. pOpenBmp->LoadFromFile("Small_ODT.bmp"); ZeroMemory(m_PixelBit, size..
const char *CommCode[] = { "NUL","SOH","STX","ETX","EOT", "ENQ","ACK","BEL","BS ","TAB", "LF ","VT ","FF ","CR ","SO ", "SI ","DLE","DC1","DC2","DC3", "DC4","NAK","SYN","ETB","CAN", "EM ","SUB","ESC","FS ","GS ", "RS ","US " }; void CommDisplay(unsigned char *str, int len) { int i; char bf[2000]; unsigned int cnt = 0; memset(bf, 0, sizeof(bf)); for (i = 0; i = 0x20) { b..
#define LENGTH 100 /* 문자열길이 */ char **ppCloseData; // 2차원 배열 동적 할당 ppCloseData = (char **)malloc(RowCount * sizeof(char *)); for (Row = 0; Row < RowCount; Row ++) { ppCloseData[Row] = (char *)malloc(LENGTH * sizeof(char)); } // 2차원 배열 할당 해제 for(Row = 0; Row < RowCount; Row ++) free(ppCloseData[Row]); free(ppCloseData);
- Total
- Today
- Yesterday