Как преобразовать NSString в кодировку, отличную от UTF-8? - PullRequest
0 голосов
/ 21 октября 2019

Я работаю с c в iOS Project. Я пытаюсь преобразовать свою строку в соответствующий тип в c, приведенный ниже код должен отправить ядру библиотеки

typedef uint16_t    UniCharT;
static const UniCharT s_learnWord[] = {'H', 'e','l','\0'};

, что я сделалдо сих пор string это то, что я передаю

NSString * string = @"Hel";
static const UniCharT *a = (UniCharT *)[string UTF8String];

Но не удается конвертировать, когда более чем один символ, Если я передаю один символ, то работает нормально, пожалуйста, дайте мне, где я скучаю,Как я могу передать как s_learnWord ?

, и я попробовал в google и StackOverFLow ни один из дубликатов или ответов не работал для меня, как это Преобразовать NSString в массив символов Я уже поступаю так же.

1 Ответ

1 голос
/ 21 октября 2019

Ваш вопрос немного двусмысленный, поскольку в заголовке написано "c type char []", но ваш код использует typedef uint16_t UniCharT;, что противоречиво.

Для любых преобразований строк, кроме UTF-8, обычно требуетсяиспользовать метод getCString:maxLength:encoding:.

Поскольку вы используете uint16_t, вы, вероятно, пытаетесь использовать UTF-16? В этом случае вы захотите передать NSUTF16StringEncoding в качестве константы кодирования. (Или возможно NSUTF16BigEndianStringEncoding / NSUTF16LittleEndianStringEncoding)

Как-то так должно работать:

include <stdlib.h>

// ...

NSString * string = @"part";
NSUInteger stringBytes = [string maximumLengthOfBytesUsingEncoding];
stringBytes += sizeof(UniCharT); // make space for \0 termination
UniCharT* convertedString = calloc(1, stringBytes);
[string getCString:(char*)convertedString
         maxLength:stringBytes
          encoding:NSUTF16StringEncoding];

// now use convertedString, pass it to library etc.

free(convertedString);
...