C++ 이미지를 문자로 표현해보기 img2ascii
오늘의 만들어볼 간단한 프로젝트는 바로 이미지를 아스키코드로 변환해 주는 img2ascii입니다. 🌳 구성 1 2 3 4 5 6 7 8 9 . ├── .git/ ├── .gitattributes ├── third_party/ │ └── stb/ │ └── stb_image.h ├── src/ │ └── main.cpp └── CMakeLists.txt 작은 프로젝트지만 git과 cmake를 활용했고 이미지 파일을 로드하기 위해 nothings/stb 라이브러리를 사용했습니다. 👍 🚀 핵심 내용 💡 Info 전체 코드는 이곳에서 보실 수 있습니다. 2차원(가로, 세로)으로 이루어진 사진은 컴퓨터에서 1차원 배열로 이루어져 있습니다....
C++ 소켓 크로스 플랫폼 개발 - 3
지난 글에서 운영체제별 비동기IO 처리 메커니즘에 대해 알아봤습니다. 이제 본격적으로 클라이언트 연결을 수립하고 통신을 하는 Server 객체를 만들어 보도록 하겠습니다. 😎 ⚠️ Warning 아래 코드는 오래된 코드일 수 있습니다. 이곳에서 최신 코드를 확인할 수 있습니다. 🌳 구조 1 2 3 4 5 6 7 8 9 10 11 12 13 14 . ├── include/ │ └── yami/ │ └── comm/ │ ├── server.hpp │ └── socket.hpp └── src/ └── comm/ ├── server....
C++ 형 변환(casting) 알아보기
윈도우 소켓에서 reinterpret_cast라는 캐스팅을 처음 봐서 캐스팅 종류에 대해 알아보고자 포스팅했습니다. 🎯 캐스팅 캐스팅(Casting)이란 어떤 데이터의 자료형(Type)을 다른 자료형으로 변환하는 것을 의미합니다. 캐스팅의 종류로는 암시적 변환(Implicit)과 명시적 변환(Explicit) 두 가지로 나눌 수 있으며 암시적 변환은 컴파일러가 자동으로 변환해 주고 명시적 변환은 프로그래머가 직접 변환하는 것을 말합니다. C++에서 캐스팅은 아래 네 가지 캐스팅 키워드로 할 수 있으며 버전에 따라 캐스팅 방법이 추가됐을 수 있습니다. 💡 info Q. 왜 C 스타일의 형 변환을 사용하지 않을까?...
C++ 소켓 크로스 플랫폼 개발 - 2
지난 글에서 리눅스와 윈도우에서 동시에 같이 사용할 수 있는 소켓 클래스를 만들어 봤습니다. 이번 글에서는 소켓에 데이터가 들어오는 것을 감지하고 처리할 수 있는 EventLoop 객체를 만들어 보겠습니다. 👍 EventLoop 객체에 사용되는 비동기 IO 처리 역시 운영체제별로 다르므로 각 운영체제에 맞게 구현해야 하며 사용되는 메커니즘은 아래와 같습니다. 🤖 I/O 이벤트 처리 방식 구분 Linux Windows 모델 epoll IOCP 방식 I/O 준비가 되면 알림 비동기 작업이 완료되면 알림 의미 읽기/쓰기를 진행할 수 있음 제출한 읽기/쓰기 작업이 끝남 처리 직접 recv()/send() 등을 호출하여 처리 시작 완료된 결과를 확인한 후 후속 작업 처리 API epoll_create1(), epoll_ctl(), epoll_wait() CreateIoCompletionPort(), GetQueuedCompletionStatus() 간단하게 리눅스에서는 알림이 오면 소켓 버퍼에서 직접 데이터를 가져오면 되고 윈도우에서는 미리 “데이터를 이 버퍼에 받아주세요....
C++ 소켓 크로스 플랫폼 개발 - 1
지난 글에서 크로스 플랫폼으로 빌드를 하려면 어떻게 해야 하는지 알아봤습니다. 이번 글에서는 리눅스와 윈도우에서 하나의 코드로 작동할 수 있는 소켓을 만들어 보도록 하겠습니다. 😄 🌳 구성 1 2 3 4 5 6 7 8 9 10 . ├── include/ │ └── yami/ │ └── comm/ │ └── socket.hpp # 헤더 (interface) └── src/ └── comm/ ├── socket.cpp # 리눅스, 윈도우 공통 구현 ├── socket_linux.cpp # 리눅스 구현부 └── socket_windows.cpp # 윈도우 구현부 ⚠️ Warning...