IT

[C++]unsigned char 배열을 std::string 변수에 넣기

심량 2014. 9. 16. 17:00

char 배열은 쉽게 string에 넣을 수 있습니다.

char array[50]; string str_array = array;

 

바이트 배열을 다룰 때 자주 쓰는 unsigned char는 호락호락하게 넣을 수 없습니다.

unsigned char uarray[50];
string str_array = uarray;
g++ -std=gnu++11 po13.cpp
po13.cpp: In function ‘int main()’: po13.cpp:127:57: error:
invalid conversion from ‘unsigned char*’ to ‘const char*’ [-fpermissive]
 
위와 같이 'unsigned char*' 형에서 'const char*' 형으로의 invalid conversion 오류가 발생합니다.
 

이걸 강제로 해주는 방법은 reinterpret_cast 지시어로 형변환을 해주면 됩니다. 대신 안전성은 검사하지 않는다고 하니 주의하여 사용해야 합니다.

unsigned char uarray[50];
string str_array (reinterpret_cast<char const *>(uarray));

위 string 생성자는 형변환을 해서 데이터를 복사하므로 원하는 길이까지만 복사할 수도 있습니다.
unsigned char uarray[50];
string str_array (reinterpret_cast<char const *>(uarray), 10);

위 코드는 uarray를 형변환을 하되 전체가 아닌 앞에서부터 10byte까지만 str_array에 복사하라는 뜻입니다.

 

형변환 지정을 하는 *_cast 연산자에 대해서 공부가 필요합니다. 관련 글은 다음에 작성하겠습니다.

 

참고: http://stackoverflow.com/questions/1673445/how-to-convert-byte-to-stdstring-in-c