char[]
을 unsigned char*
으로 변환하는 방법이 있습니까?문자 배열을 부호없는 char *로 변환 *
char buf[50] = "this is a test";
unsigned char* conbuf = // what should I add here
char[]
을 unsigned char*
으로 변환하는 방법이 있습니까?문자 배열을 부호없는 char *로 변환 *
char buf[50] = "this is a test";
unsigned char* conbuf = // what should I add here
기술적으로 100 % 합법적이지는 않지만 reinterpret_cast<unsigned char*>(buf)
을 사용할 수 있습니다.
이 100 % 기술적 정당하지 않은 이유는, 객체에 대한 포인터가 명시 적으로의 객체에 대한 포인터로 변환 될 수있는 제
섹션 5.2.10
expr.reinterpret.cast
탄에 기인 다른 유형. 원래 유형이 원래 포인터 값을 산출하면 포인터 변환 결과는 지정되지 않습니다.
나는 *reinterpret_cast<unsigned char*>(buf) = 'a'
이 지정되지 않았지만 *reinterpret_cast<char*>(reinterpret_cast<unsigned char*>(buf)) = 'a'
은 괜찮습니다.
내가 올바르게 기억하면 [[un] signed] char에 대한 포인터를 사용하여 모든 유형의 객체의 메모리에 액세스하는 것이 합법적이라는 예외가 있습니다. 나는 당신의 코드의 행동을 잘 정의했다고 생각한다. – HolyBlackCat
@HolyBlackCat 나는 그러한 문구를 기억하지 못한다. 참고 자료를 제공 할 수 있다면 대답을 업데이트 할 것이다. – Motti
Unforunately 표준 참조를 찾을 수 없습니다. 그러나 나는 'char *'에 대한 엄격한 앨리어스 (aliasing) 규칙에 대한 예외가 있다는 SO에 대한 몇 가지 주장을 발견했다. ("[un] signed char에 대한 포인터를 사용하여 모든 유형의 객체의 메모리에 접근하는 것은 합법적이다. "). See this : http://stackoverflow.com/a/99010/2752075'앨리어싱 <...>에 char *를 사용할 수 있습니다. 이 규칙은 char * (signed char 및 unsigned char 포함)에 대한 예외를 허용합니다. char *는 다른 유형의 별칭이라고 항상 가정합니다. 그러나 이것은 다른 방식으로는 작동하지 않습니다. 구조체에 chars.x의 버퍼를 별명으로 지정하지 않는다는 의미입니다. – HolyBlackCat