Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在objective-c中将长值转换为unichar*_Objective C_Nsstring_Long Integer_Unichar - Fatal编程技术网

在objective-c中将长值转换为unichar*

在objective-c中将长值转换为unichar*,objective-c,nsstring,long-integer,unichar,Objective C,Nsstring,Long Integer,Unichar,我将大型unicode字符(0x10000+)存储为long类型,最终需要转换为NSStrings。较小的unicode字符可以创建为unichar,而NSString可以使用 [NSString stringWithCharacters:(const unichar *)characters length:(NSUInteger)length] 因此,我认为从unicode长值中获取NSString的最佳方法是首先从long值中获取unichar*。你知道我该怎么做吗?你有什么理由将这些值存

我将大型unicode字符(
0x10000
+)存储为
long
类型,最终需要转换为
NSStrings
。较小的unicode字符可以创建为
unichar
,而
NSString
可以使用

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

因此,我认为从unicode长值中获取
NSString
的最佳方法是首先从
long
值中获取
unichar*
。你知道我该怎么做吗?

你有什么理由将这些值存储为
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: 杞⌘☺