以下两个unichar分配都失败了吗?
unsigned int c = 0x0001d122;
[NSString stringWithFormat:@"\U%@", [NSString stringWithFormat:@"%08X", c]];
[NSString stringWithFormat:@"\U%08X", c];
我正在尝试以编程方式执行此操作(添加“\ U”会使事情变得困难,如上所示):
nssSymbol = @"\U0001d122"; \\this works... but need to be able to vary 'c'
答案 0 :(得分:2)
如Ken Thomases所示,您可以从字节创建字符串,但是您必须知道机器的字节序或使用字节序转换例程。
例如,在小端的英特尔Mac上,您可以使用:
uint32_t c = 0x0001d122;
NSString* s = [[NSString alloc] initWithBytes:&c
length:sizeof(c)
encoding:NSUTF32LittleEndianStringEncoding];
如果您不希望编码系统字节序的知识,可以使用转换例程。例如:
uint32_t c = EndianU32_NtoB(0x0001d122); // convert from native endianness to big endian
NSString* s = [[NSString alloc] initWithBytes:&c
length:sizeof(c)
encoding:NSUTF32BigEndianStringEncoding];
HTH
答案 1 :(得分:1)
在字符串文字中处理\Unnnnnnnn
构造是在编译时完成的。您无法在运行时构建构造并对其进行解释。事情并非如此。
你可以这样做:
uint32_t c = 0x0001d122;
NSString* s = [[NSString alloc] initWithBytes:&c length:sizeof(c) encoding:NSUTF32LittleEndianStringEncoding];