유니코드로 구성된 문자열을 바이트배열로 변환하는 함수를 보여드리겠습니다.
===저번에 바이트배열을 문자열로 바꾼것 까지 포함되어있습니다.===
소스 해석을 하도록 하겠습니다.
string 이 아닌 wstring (유니코드) 이므로 문자열은 2byte씩 먹으므로 곱하기 2를 하였습니다.
비트연산자 & 를 사용하여 0xff (byte*)라는 뜻으로 8비트로 연산한 결과 값을 Buf라는 byte* 포인터 배열에
삽입합니다.
그렇게 되면 "Short" 형으로 한 사이즈 값이 byte배열에 2byte를 차지하게 되고 나머지부분을
실제 문자열을 byte화 한값을 넣으므로서 아래 그림과 같이 byte 에 삽입이 됩니다.
Short Size |
Short Size |
..Data.. |
..Data.. |
..Data.. |
..Data.. |
..Data.. |
..Data.. |
굳이 사이즈 값을 넣기 싫다? 그러면
위에 비트 연산한것과 memcpy_s(Buf + "HEADER" 에서 이 열거형 헤더를 지우시면 되겠습니다.
그리고 메인함수에서 밑에 보면 "malloc" 로 할당한 메모리를 다사용했으니
free로 해제함으로서 깔끔한 함수가 되겠습니다.
참고로 malloc 나 new로 해서 메모리를 스택이나 힙에 할당하고 꼭! 해제는 해야 합니다. 그리고 해제할때
크기를 올바르게 설정하고 크기에 맞게 사용해야 해제가 됩니다!!
포인터라는게 좋은 놈이고 매력적인 놈이지만, 그만큼 제약이 따르다는것을 명심해주셔야 합니다 :D
그럼 포스팅을 마치도록 하겠습니다.
ps. _msize 는 포인터배열의 메모리 크기를 알려주는 놈이 되겠습니다.
'c&c++' 카테고리의 다른 글
WSAGetLastError() 에러코드 번역. (2) | 2017.08.08 |
---|---|
[메모장]IOCP [펌] (0) | 2017.07.12 |
[메모장]Send/Recv,Read/Write 차이[펌] (0) | 2017.07.12 |
C/C++ byte[] to string 변환(cast) (0) | 2017.07.04 |
stl를 이용한 MultiMap 사용 (0) | 2017.07.03 |