728x90
반응형
728x90
반응형
728x90
반응형

QSLogLib

  • 홈페이지 : https://github.com/JayTwoLab/QSLogLib

  • QSLogLib는 SLogLib를 Qt로 이식한 로깅 라이브러리 입니다.

  • 향상된 장치와 기능으로 Qt로 포팅되었습니다.

노트

  • Cmake는 더 이상 지원하지 않습니다.
  • 크로스 플랫폼 지원을 위한 복잡한 코드 대신에 Qt를 사용합니다.
  • UDP 클라이언트 로거가 추가되었습니다.

예제

1️⃣ 설정 방법

  • 처음에 Qt 프로젝트 파일(*.pro)에 pri 파일을 추가합니다.
  • qmake

    # Define QSLogLib relative path. You can fix this directory
    #   QSLOG_PARENTPATH = ../../
    #   QSLOG_HEADERPATH = ../../QSLogLib/
    #   QSLOG_SOURCEPATH = ../../QSLogLib/
    include(../../QSLogLib/QSLogLib.pri)
    

2️⃣ 표준 출력/파일 로깅 예제

  • cpp

    #include <QtGlobal>
    #include <QCoreApplication>
    
    #include "QSLogLib/SLogLib.h"
    #include "QSLogLib/Devices/AbstractLoggingDevice.h"
    #include "QSLogLib/Devices/ConsoleLogger.h"
    #include "QSLogLib/Devices/FileLogger.h"
    #include "QSLogLib/Devices/UdpLogger.h"
    #include "QSLogLib/Formatters/AbstractFormatter.h"
    #include "QSLogLib/Formatters/DetailedFormatter.h"
    #include "QSLogLib/Formatters/ErrorFormatter.h"
    #include "QSLogLib/Formatters/InfoFormatter.h"
    #include "QSLogLib/Formatters/NullFormatter.h"
    
    int main(int argc, char *argv[])
    {
        QCoreApplication mainApp(argc, argv);
    
        using namespace QSLogLib;
    
        // 로깅 장치 추가 
        addLoggingDevice( new ConsoleLogger(new NullFormatter) ); // 콘솔(console) + 단순 로깅 형식(null format)
        addLoggingDevice( new FileLogger("foo.log", new DetailedFormatter) ); // 파일(file) + 자세한 로깅 형식(detailed format)
    
        // 콘솔과 파일 모두로 로그가 출력됨
        int a = 10;
        double b = 15.3;
        const char* c = "Success";
        SLOGLIB_LOG_MSG_INFO("a = " << a << " b = " << b);
        SLOGLIB_LOG_MSG_INFO(c);
    
        return 0;
    }
    

3️⃣ UDP 송신 예제

  • cpp

    int main(int argc, char *argv[])
    {
    	QCoreApplication mainApp(argc, argv);
    
    	using namespace QSLogLib;
    
    	std::string strDestAddress = "192.168.137.1";
    	unsigned short destPort = 5000;
    	addLoggingDevice(new UdpLogger(strDestAddress, destPort, new NullFormatter));
    
    	// UDP 패킷으로 로그를 송신
    	int a = 10;
    	double b = 15.3;
    	const char* c = "Success";
    	SLOGLIB_LOG_MSG_INFO("a = " << a << " b = " << b);
    	SLOGLIB_LOG_MSG_INFO(c);
    
    	return 0;
    }
    

테스트 환경

  • Qt 6.0.0 (MingW, Windows 64bit)
  • Qt 5.10.1 (MingW, Windows 32bit)
  • Qt 5.6.2 (Linux 64bit)

라이센스

  • QSLogLib는 MIT 라이센스입니다.
728x90
반응형
728x90
반응형

Windows API에서 2의 거듭제곱 여부를 확인

GNU C에는 log2() 함수가 있어 2의 거듭제곱 여부를 쉽게 확인할 수 있지만, Windows 표준 수학 함수에는 해당 함수가 없습니다.

따라서 log() 함수를 활용하여 다음과 같이 구현할 수 있습니다:

c

#include <math.h>
#include <limits.h>
#include <stdio.h>

int main() {
    for (int i = 2; i < INT_MAX; i++) {
        double t = log((double)i) / log(2.0);
        int r = (int)ceil(t);
        int p = (int)pow(2, r);

        if (i == p) {
            printf("%d\n", i); // 2의 거듭제곱 수입니다.
        }
    }
    return 0;
}

이 코드는 2부터 INT_MAX까지의 정수 중 2의 거듭제곱인 수를 찾아 출력합니다.

log() 함수를 사용하여 주어진 수의 로그 값을 계산하고, 이를 통해 2의 거듭제곱 여부를 판단합니다.

728x90
반응형

+ Recent posts