Преобразование длинного значения в unichar * в target-c - PullRequest
0 голосов
/ 21 апреля 2010

Я храню большие символы Юникода (0x10000 +) в виде long типов, которые в конечном итоге необходимо преобразовать в NSStrings. Меньшие символы Юникода могут быть созданы как unichar, а NSString может быть создан с помощью

[NSString stringWithCharacters:(const unichar *)characters length:(NSUInteger)length]

Итак, я полагаю, что лучший способ получить NSString из значения Юникод long - это сначала получить unichar* из значения long. Есть идеи о том, как я могу это сделать?

1 Ответ

1 голос
/ 21 апреля 2010

Есть ли причина, по которой вы сохраняете значения как long s? Для хранения Unicode вам нужно только сохранить значения как UInt32, что позволит легко интерпретировать данные как UTF-32, выполнив что-то вроде этого:

int numberOfChars = 3;
UInt32* yourStringBuffer = malloc(sizeof(UInt32) * numberOfChars);
yourStringBuffer[0] = 0x2F8DB; //杞
yourStringBuffer[1] = 0x2318;  //⌘
yourStringBuffer[2] = 0x263A;  //☺

NSData* stringData = [NSData dataWithBytes:yourStringBuffer length:sizeof(UInt32) * numberOfChars];

//set the encoding according to the current byte order
NSStringEncoding encoding;
if(CFByteOrderGetCurrent() == CFByteOrderBigEndian)
    encoding = NSUTF32BigEndianStringEncoding;
else
    encoding = NSUTF32LittleEndianStringEncoding;

NSString* string = [[NSString alloc] initWithData:stringData encoding:encoding];

free(yourStringBuffer);

NSLog(@"%@",string);

//output: 杞⌘☺
...