c&c++ 16

C/C++ String to Byte Cast(Unicode)변환.

유니코드로 구성된 문자열을 바이트배열로 변환하는 함수를 보여드리겠습니다.#include #include bool castByte(byte* &Buf,std::wstring Str) {enum{HEADER = 2};short Size = Str.size()*2;//..Short..Buf[0] = Size & 0xff;Buf[1] = (Size >> 8) & 0xff;memcpy_s(Buf + HEADER, Size, Str.c_str(), Size);return true;}bool castChar(byte Buf[], std::wstring &Str) {USHORT Size = Buf[0];wchar_t EcodeArr[16] = { 0 };memcpy_s(EcodeArr, Size, Buf + 2, Si..

c&c++ 2017.08.17

WSAGetLastError() 에러코드 번역.

요즘들어 포스팅을 아예 못하고있는데 그 원인이!! 바로 C++ 서버만들고 있어서 그렇습니다. 윈속부터 시작해서 IOCP 까지..서버다운 서버를 만들기 위해서 포스팅을 못하고 있습니다.ㅜㅜ 그러다 WSAGetLastError 라고 하는 아주 재밌는 녀석때문에 에러코드를 MSDN 가서 일일히 확인해야 되서 여기에 좀 메모좀 할려고 합니다.이름 값 설명 WSA_INVALID_HANDLE 6 지정된 이벤트 객체 핸들이 잘못 되었다. WSA_NOT_ENOUGH_MEMORY 8 메모리가 충분하지 않다. WSA_INVALID_PARAMETER 87 하나 이상의 잘못된 인자가 사용됐다. WSA_OPERATION_ABORTED 995 overlapped 연산이 중단 되었다. WSA_IO_INCOMPLETE 996 Ove..

c&c++ 2017.08.08

[메모장]IOCP [펌]

서버만드는데 있어 가장 중요한 IOCP. 좋은 자료가 있길레 적어둬야징ㅋ_ㅋ출처 - http://ozt88.tistory.com/23IOCP 개념 싱글 쓰레드로는 부족해 이전 게시물까지 이야기 했던 통지모델들은 싱글쓰레드 멀티플렉싱을 위한 확장처럼 보였다. 하지만 싱글쓰레드 스마트폰도 보기 힘든 2015년 현재, 굳이 하이엔드 스펙을 갖춘 서버에서 싱글쓰레드를 써야할까? 이전 멀티쓰레드형 서버의 문제는 컨텍스트 스위칭 비용이었다. 하지만 CPU개수만큼만 쓰레드를 사용한다면, 컨텍스트 스위칭 문제는 크게 문제가 되지 않는다. 그러니까 우리는 딱 CPU개수만큼만 쓰레드를 쓰는 서버를 만들고 싶다. 이 막연한 희망사항에 긍정적으로 대답해주는 것이 바로 윈도우의 IOCP이다. 어떻게 구현할 것인가? 수많은 I/..

c&c++ 2017.07.12

[메모장]Send/Recv,Read/Write 차이[펌]

이건 내가 나중에도 보고 지금도 볼수 있게 메모장으로 해놓은것.출처 - http://blog.naver.com/PostView.nhn?blogId=xenoheart&logNo=130128522839 Linux의 경우에 대한 이야기이다.Windows에서는 socket programming에서 read/write를 쓸 수 없다.read/write와 send/recv의 차이에 대해서 검색하다가 좋은 글이 있어 소개한다.영어로 된 글이어서 번역 및 정리를 하였다.원본은 다음 링크를 확인하자 : http://www.developerweb.net/forum/showthread.php?t=3878read/write가 socket에 대해서 동작할때는 마지막에 recv/send를 호출한다.recv/send는 매 I/O에..

c&c++ 2017.07.12

C/C++ byte[] to string 변환(cast)

이것은 byte -> string 형변환 함수입니다.(버퍼배열-> 문자열) 예를 들면 이런식으로 한글이나 아스키코드를 byte [] 로 바꿧는데 그것을 다시 한글이나 아스키코드로 디코딩을할려고 할때 형변환을 해줘야 하는데그럴땐 이거 그대로 작성하셔서 사용하시면 됩니다. 물론, 이건 제가 만들었습니다.사용법은 간단합니다. byte로 되어있는 배열과 그것을 변환하고 싶은 string 을 선언후 저 함수를 사용하시면 되겠습니다. 참고로 Enum(열거형) 에 BUF_SIZE 와 DATA 가 있는데 그것은 byte로 변환할때 앞에 사이즈와 실제 데이터를 말하는 것으로BUF_SIZE 의 값은 '0' 이고, DATA 는 '2' 입니다. 제가 만든 함수를 사용하실려면 byte배열안에 문자사이즈 빈공간 문자 문자 문자 ..

c&c++ 2017.07.04

stl를 이용한 MultiMap 사용

흔히 맵에 대해서는 잘 알것으로 생각이 듭니다. 맵을 한마디로 정의하면 Key값을 중복안되게 데이터값들을 저장하는 곳.. 하지만, Key 값이 중복되게하고 그 Key 값에 맞는 데이터 값들을 뽑아 사용할수 있는 자료구조도 필요합니다. 그리하여 MultiMap 이라는 것이 있습니다. (C/C++뿐만아니라 자바도 있고 물론 C#도 있습니다 :D) 간단한 예제를 보도록 하겠습니다. #include #include #include #include void main() { std::multimap MultiMap; int cnt = 0; //멀티맵에 랜덤값 집어넣기 for (int i = 0; i < 10; i++) { if (i % 3 == 0) { cnt++; } MultiMap.insert(std::mult..

c&c++ 2017.07.03

[펌]C/C++ pragma대해서

출처 : http://iprinceps.egloos.com/1334766 #pragma는 define 이나 include와 같이 #으로 시작하는 전처리구문(precompiler)의 하나이다. 컴파일러에 종속적인 구문이라 컴파일러가 변경되었을 경우 제대로된 동작을 보장하지 못하므로 프로젝트 진행중에 서로 다른 컴파일러를 사용한다면 사용하지 않음이 바람직 하겠다. - 대신 대체하는 문법을 사용해야 되겠다. #pragma once 이것은 "컴파일러에게 한번만 컴파일해!" 라고 명령한다. 헤더의 중복을 막아준다. 무슨말인가 하면 a.h를 구현한 a.cpp, a.h는 독립적이다.(include가 없다.) b.h를 구현한 b.cpp, c.h, a.h순서로 include c.h를 구현한 c.cpp, a.h를 incl..

c&c++ 2017.07.01

C/C++ 나만의 charAt() 함수 만들기

안녕하세요 jsieun 입니다. 요번에 배우실것은 흔히 자바에서 charAt 라는 함수가 있는데, 예를 들면 "안녕하세요" 라는 문자열을 charAt(2) 을 하면 "하" char 형으로 얻을수가 있습니다. 대게 charAt() 라는 함수는 한단어를 따오고싶을때 사용합니다. 그럼 출력 화면을 보겠습니다. 여기서 눈여겨 봐야할것은 유니코드와 아스키 코드인데 유니코드는 쉽게 말해서 "한글"을 뜻합니다. 그리고 아스키 코드는 말그대로 "abcde123+!!" 이런 문자들을 뜻합니다. 둘이 어떤 차이점이 있냐면 아스키코드는 "1바이트" 먹는놈이고,유니코드는 "2바이트" 먹는 놈입니다. 그래서 대게 한글을 출력하고싶을땐 char* _str ="한글입니다."; 이렇게 해서 출력을 합니다. 이런식으로 되는것이고, 소..

c&c++ 2017.06.09

나열되는 연속합들의 최대합구하기

안녕하세요 jsieun입니다. 제가 백준 1912번문제를 자바로 했던 기억이 있는데 그것을 그대로 C++ 로해서 포스팅을 해보겠습니다. :D 차근차근 C++를 시작하는것이 가장 좋을듯 하여 그렇습니다. 연속되는 숫자들의 합중 최대합이란, 예를 들면-59 -33 34 0 69 24 -22 58 62 -36 10개의 배열중 이렇게 숫자들이 나열되어 있으면 최대합은 위에 빨간색으로 칠한 부분이 되겠습니다. 즉, 저 숫자들을 다합치면 225 라는 숫자가 나오는데 이 숫자는 저 나열된 숫자중 연속적으로 더했을때 가장 최대로 나오는 숫자의 합입니다. 출력 화면을 보도록 하겠습니다. 다음으로 소스를 보도록 하겠습니다. #include #include static int _ComparArr[10] = { 0 };boo..

c&c++ 2017.06.08