2012-02-15 2 views
0

제목에서 알 수 있듯이 두 가지 질문이 있습니다.문자열에 char * 대신 short *가 필요한 이유는 무엇입니까? char *와 unsigned char *의 차이점은 무엇입니까?

편집는 : 그들이 8 비트 및 16 비트 특정 형식 정의가 될 수 있도록, 그들이 실제로 charshort를 사용하지 않는, 명확합니다. 실제 유형은 UInt8UInt16입니다.

1. 질문 아이튠즈 SDK는 문자열이 필요 unsigned short*를 사용

. char*/unsigned char* 대신 사용하면 어떤 이점이 있습니까? 이 파일을 char*으로 변환하는 방법과이 유형으로 작업 할 때 다른 점은 무엇입니까? 문자열이 아직 저장해야 할 때 난 단지 char*을 본 적이

2. 질문. 언제 unsigned char*을 사용해야하나요, 아니면 어떤 차이가 있습니까?

+0

'short'는 2 바이트의 타입이고'char'는 1 바이트의 타입입니다. SDK가'short * '를 사용하여 문자열을 가리키는 이유를 알 수 없습니다. 확실한가요? – Eregrith

+0

@Eregrith'short'는 2 바이트 너비가 보장되지 않습니다. –

+0

@Eregrith'typedef UInt16 UniChar;', 이것은 'UniChar * someString;'처럼 사용됩니다. –

답변

5

unsigned short 이러한 경우에는 wchar_t이 표시 될 것으로 예상되지만 배열은 넓은 문자열 (예 : UTF-16 인코딩 된 텍스트가있는 경우)과 함께 사용할 수 있습니다. 그러나 MacOS와 Windows가 호환되는 것과 같은 이유가있을 수 있습니다. (내 소스가 맞으면 MacOS의 wchar_t은 32 비트이고 Windows는 16 비트 임)

적절한 라이브러리 함수를 호출하여 두 유형의 문자열을 변환합니다. 적절한 기능은 상황에 따라 다릅니다. SDK에는 SDK가 제공되지 않습니까?

대신 unsigned charchar은 물론, 모든 문자열은 역사적으로 항상 호환성을 소개 할 unsigned char로 전환, char으로 정의하고있다.
(... 또한 호환성 문제를 야기 signed char로 전환하지만, 어떻게 든 많은되지 않음)

편집는 이제 질문은 편집 된 날 나는 내 대답을 입력하기 전에 내가 편집을 참조하지 않았다고 가정 해 봅시다 . 하지만 그렇습니다. UInt16은 위의 이유로 wchar_t보다 16 비트 엔티티를 더 잘 표현한 것입니다.

1

1. 질문 - 대답

나는 그들이 유니 코드 문자를 UTF-16 인코딩을 사용하고, 따라서에서와 BMP 중 문자를 모두 표현해야하기 때문에 그들이 * 짧은 부호를 사용한다고 가정합니다. 귀하의 질문의 나머지 소스와 목적지 (UTF-8,16,32)

2. 질문의 유니 코드 인코딩의 유형에 따라 달라집니다 - 다시

대답 인코딩의 종류에 따라 달라집니다 너 무슨 끈이야. 확장 ASCII 테이블 외부의 문자 스트링을 처리하려는 경우 서명 된 또는 서명되지 않은 문자를 사용해서는 안됩니다.(영어 이외의 다른 언어)

1
  1. 아마 UTF-16 문자열을 사용하는 무모한 시도. C는 wide character 유형, wchar_tchar (또는 wchar_t 초)은 16 비트 길이가 될 수 있습니다. SDK에 익숙하지 않아서 정확히이 경로를 통과 한 이유를 말할 수는 없지만 컴파일러 문제를 해결하는 것이 좋습니다. C99에는 더 많은 [u] int [least/fast] 16_t 유형이 있습니다 (<stdint.h> 참조).

    C는 데이터 형식과 기본 크기에 대해 거의 보장하지 않습니다. 서명 된 또는 서명되지 않은 반바지는 16 비트 (적어도 그렇게 많이 보장되지만) 또는 8 또는 widechars 16 또는 32로 제한되지는 않습니다.

    char 및 short 문자열간에 변환하려면 SDK가 제공하는 변환 함수를 사용하십시오. 또한 짧은 문자열에 저장된 내용과 원하는 문자열을 알고 있다면 타사 라이브러리를 직접 작성할 수도 있고 타사 라이브러리를 사용할 수도 있습니다.

  2. 실제로 차이는 없습니다. 문자에 대해 (부호없는) 산술 또는 비트 조작을 원할 경우 일반적으로 unsigned char으로 변환합니다.

편집 : UInt16과 부호없는 short를 사용했다고 말하기 전에이 대답을 썼습니다. 이 경우에는 토끼 두뇌가 없습니다; 전용 유형은 UTF-16 데이터를 저장하기 위해 stdint 유형이없는 구형 (또는 비준규) 컴파일러와의 호환성을 위해 사용됩니다. 어느 것이 완벽하게 합리적입니다.