c&c++

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

sieunju 2017. 8. 17. 13:17
반응형

유니코드로 구성된 문자열을 바이트배열로 변환하는 함수를 보여드리겠습니다.

===저번에 바이트배열을 문자열로 바꾼것 까지 포함되어있습니다.===

소스 해석을 하도록 하겠습니다. 


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