2010-04-21 93 views
0

我將大型Unicode字符(0x10000 +)存儲爲long類型,最終需要將其轉換爲NSStrings。較小的Unicode字符可以作爲unichar創建和NSString可以使用將long值轉換爲unichar * in objective-c

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

所以被創建,我想擺脫unicode的長期價值NSString將首先從long得到unichar*的最佳方式值。有關我如何去做這件事的任何想法?

回答

1

是否有任何理由將數值存儲爲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: 杞⌘☺