2010-04-21 18 views
0

Je stocke de grands caractères Unicode (0x10000 +) en tant que long types qui doivent éventuellement être convertis en NSStrings. Les petits caractères unicode peuvent être créés en tant que unichar, et un NSString peuvent être créés à l'aideConversion de valeur longue en unichar * dans l'objectif-c

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

Alors, je pense la meilleure façon d'obtenir un NSString de la valeur à long unicode serait d'abord obtenir un unichar* de la long valeur. Une idée sur comment je pourrais faire ça?

Répondre

1

Y a-t-il une raison pour laquelle vous stockez les valeurs long s? Pour le stockage Unicode il vous suffit de stocker les valeurs que UInt32, qui serait alors le rendre facile d'interpréter les données comme UTF-32 en faisant quelque chose comme ceci:

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: 杞⌘☺