[C++]21. C++ unsigned char 포인터 형변환하기(unsigned char* to string)
안녕하세요 고급 개발자가 꿈인 코린이 입니다.
오늘은 C++ 프로그래밍을 하다보면 자주 사용하는 형변환하는 방법에 대해서 포스팅 하겠습니다.
오늘 형변환하는 내용은 옛날에 나용하던 내용과 최근에 변경되어서 사용하는 방법에 대해서 다루어 보려고 하는데요
옛날에 사용하는 방법도 사용해도 괜찮지만 앞으로 C++이 업데이트 되면 최근에 사용하는 방법으로
구현을 해야 합니다.
그래서 오늘은 두가지 경우를 모두 다루어 볼예정이고 이 글을 보시는 분들께서는 최신방법을 사용하는것을
권장합니다.
아래의 예제 코드에는 옛날 방법으로 구현한 형변환 방법과 새로운 방법으로 구현한 형변환 방법이 나와있습니다.
1. unsigned char * 형식에서 string 형식으로 형변환 (옛날 방법)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <iostream>
#include <unistd.h>
using namespace std;
int main()
{
const unsigned char charArray [] = "char pointer convert example";//define char array
const unsigned char* unsignedChar = &charArray[0];
std::string afterString = "";
afterString = (std::string)((const char *)unsignedChar); // old style
std::cout <<"old style convert example afterString:" << afterString << std::endl;// old style
return 0;
}
|
cs |
2. unsigned char * 형식에서 string 형식으로 형변환 (최신 방법)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <iostream>
#include <unistd.h>
using namespace std;
int main()
{
const unsigned char charArray [] = "char pointer convert example";//define char array
const unsigned char* unsignedChar = &charArray[0];
std::string afterString = "";
afterString = static_cast<std::string>(reinterpret_cast<const char *>(unsignedChar)); // new style
std::cout <<"new style convert example afterString:" << afterString << std::endl;// new style
return 0;
}
|
cs |
위의 예제 실행 결과를 보면 둘다 똑같은 결과가 나오는 것을 확인 할수가 있습니다.
첫번예 옛날 스타일의 형변환은 형변환 하고 싶은 내용옆에 가로를 쳐서 변형하고 싶은 타입을 적으면 바로 형변환이
되도록 되어있습니다. 그래서 정말 간단하게 구현이 가능한데요 그런데 이러한 내용을 사용하지 않는 이유는
예전 방식의 형변환은 코드 실행중에 에러가 발생하지만 최신 방식의 형변환은 코드 구현할때 에러 판단을 할수가
있습니다.
즉 옛날 방식은 형변환에 오류가 있어도 프로그램이 실행이 되고 실행되고 나서 에러가 발생하지만
최근 방식은 형변환에 오류가 있는 것들을 컴파일 하기전에 미리 알려주어서 실행하기 전에 알수있기 때문에
구현시간을 더욱 단축 시켜줍니다.
그리고 C++이 업그레이드 되면서 옛날방식의 형변환을 지원하지 않기 때문에 아래 이미지와 같이 옛날스타일로
구현하게 되면 old style을 사용하고 있다고 출력이 됩니다.
그렇기 때문에 새로운 스타일의 캐스트 방법을 사용하는 것이 좋은 방법입니다.
여기서 reinterpret_cast란 임의의 포인터 타입끼리 변화는 하는 연산자 입니다.
const unsigned char 포인터를 const char 포인터로 변환을 해야하기 때문에 reinterpret_cast를 사용하였고
static_cast로 일반 타입들의 형변환을 하였습니다.(static_cast도 포인터 형변환이 가능한데 추구 더 공부해서 차이점을 포스팅 하겠습니다.)
여기 까지 unsigned char 포인터 형식을 string형식으로 변환하는 내용을 다루어 보았습니다.
위와 같은 내용은 많이 사용하지는 않지만 간혹가다 사용할때가있어서 포스팅 하게 되었습니다.
여기 까지 읽어 주셔서 감사합니다.
'C++ > C++심화' 카테고리의 다른 글
[C++]20. C++ 파일크기 구하기 (0) | 2020.07.11 |
---|---|
[C++]19. C++ 데이터 버퍼에 정보를 저장하기(데이터 버퍼에 정보를 저장하고 파일로 저장하기) (0) | 2020.07.05 |
[C++]18. C++에서 파일의 존재 여부 확인 하기 (0) | 2020.04.15 |
[C++]17. string 데이터를 int형 데이터로 변경하는 방법(string to int) (0) | 2020.04.11 |
[C++]16. int형 데이터를 string 형 데이터로 변경(int to string) (0) | 2020.04.11 |