2010-04-21 91 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: 杞⌘☺