unsigned char *에서 const char *로 C ++ 스타일 캐스트
나는 가지고있다:
unsigned char *foo();
std::string str;
str.append(static_cast<const char*>(foo()));
오류: invalid static_cast from type ‘unsigned char*’ to type ‘const char*’
여기서 C ++ 스타일로 캐스팅하는 올바른 방법은 무엇입니까?
reinterpret_cast
char *
와 const unsigned char *
관련이없는 유형으로 간주됩니다. 그래서 당신은 reinterpret_cast
.
그러나 const unsigned char*
비 const
유형 으로 이동 하는 경우 const_cast
먼저 사용해야 합니다. 또는 자격을 reinterpret_cast
버릴 수 없습니다 .const
volatile
시험 reinterpret_cast
unsigned char *foo();
std::string str;
str.append(reinterpret_cast<const char*>(foo()));
unsigned char *는 기본적으로 바이트 배열이며 일반적으로 문자열이 아닌 원시 데이터를 나타내는 데 사용해야합니다. 유니 코드 문자열은 wchar_t *로 표시됩니다.
C ++ 표준에 따르면 unsigned char *와 char * 사이의 reinterpret_cast는 크기가 같고 구성과 제약이 동일하기 때문에 안전합니다. 일반적으로 const_cast보다 reintrepret_cast를 더 많이 피하려고합니다.
만약 당신이하는 일에서 정적 캐스트가 실패한다면 솔직히 당신이 C ++를 사용한다면 당신은 "플러스 플러스"부분이 제공하는 것을 활용하고 문자열 클래스와 STL (일명 std :: basic_string)을 사용하기를 원할 수 있기 때문에 당신의 디자인을 재고 할 수 있습니다. 당신을 위해 더 잘 작동 할 수 있습니다)
reinterpret_cast<>
캐스트하는 두 유형이 서로 관련 이 없으므로 a를 사용해야합니다 .
다른 답변에 대한 댓글이 너무 많으므로 여기에 다른 답변을 남길 것입니다.
귀하의 경우을 사용할 수 있으며 사용해야합니다 reinterpret_cast<>
.
str.append(reinterpret_cast<const char*>(foo()));
왜냐하면이 두 가지 유형은 다르지만 2014 년 표준에서는 두 가지 유형 간에 관계 가3.9.1 Fundamental types [basic.fundamental]
있다고 말합니다 .
Plain
char
,signed char
및unsigned char
세 가지 고유 한 유형으로 집합 적으로 좁은 문자 유형이라고합니다. A는char
, A는signed char
,와는unsigned char
같은 크기의 저장 용량을 차지하고 동일한 배향 요구 (3.11)가; 즉, 동일한 객체 표현을 갖습니다.
(선택은 내 것임)
다음은 사용 가능한 링크입니다. https://en.cppreference.com/w/cpp/language/types#Character_types
wchar_t
유니 코드 / 멀티 바이트 문자열에 대한 사용 은 오래되었습니다. UTF-8을 사용할 때 wchar_t를 사용해야합니까?
도움이 되었기를 바랍니다. :)
const unsigned attribName = getname();
const unsigned attribVal = getvalue();
const char *attrName=NULL, *attrVal=NULL;
attrName = (const char*) attribName;
attrVal = (const char*) attribVal;
참고 URL : https://stackoverflow.com/questions/658913/c-style-cast-from-unsigned-char-to-const-char
'developer tip' 카테고리의 다른 글
파이썬에서 (Windows) 클립 보드의 텍스트를 어떻게 읽습니까? (0) | 2020.10.16 |
---|---|
데이터베이스에 암호를 저장하는 기본 방법 (0) | 2020.10.16 |
OPENQUERY에 매개 변수 포함 (0) | 2020.10.16 |
lxml에서 요소를 제거하는 방법 (0) | 2020.10.16 |
UI-Router를 사용하여 상위 상태로 전환 할 때 사용자를 하위 상태로 안내 (0) | 2020.10.16 |