如何从 NSString
中获取 Unicode 值?例如,
NSString *str = "A";
NSString *hex;
现在,我想将hex
的值设置为str
的Unicode值(即0041)... 我应该如何做到这一点?
如何从 NSString
中获取 Unicode 值?例如,
NSString *str = "A";
NSString *hex;
现在,我想将hex
的值设置为str
的Unicode值(即0041)... 我应该如何做到这一点?
unichar
类型被定义为16位unicode值(例如,间接记录在%C说明符的描述中),您可以使用characterAtIndex:
从NSString
的特定位置获取unichar
,或者使用getCharacters:range:
如果您想要比一次查询更快地从NSString
中填充unichar
的C数组。
NSUTF32StringEncoding
也是一种有效的字符串编码方式,还有一些特定于字节顺序的变体,以防您希望绝对未来。您可以使用更繁琐的getBytes:maxLength:usedLength:encoding:options:range:remainingRange:
获取这些的C数组。
编辑:例如
NSString *str = @"A";
NSLog(@"16-bit unicode values are:");
for(int index = 0; index < [str length]; index++)
NSLog(@"%04x", [str characterAtIndex:index]);
您可以使用
NSData * u = [str dataUsingEncoding:NSUnicodeStringEncoding];
NSString *hex = [u description];
NSData
包含一个单一的原子内存块,保存相关数据,因此您可以获取其 bytes
属性并适当地将其转换为 C 数组以进行遍历。只需注意 length
即可。因此,这比根据我的答案分配自己的缓冲区并使用 getBytes:maxLength:...
来获取 32 位 UTF 代码数组的方法要干净得多。 - Tommy
code
NSString *hexValue = [NSString stringWithFormat:@"%C", @"<"];code
时,我得到了棰。 - citruspi@"<"
是一个字符串,因此是一个对象,但%C
需要一个文字。你不幸地掉进了Objective-C的面向对象世界和C的字面值老世界之间的断层线。您将使用%@
来指定一个对象,或使用'<'
来作为字面量放置一个字符 - 虽然在这两种情况下,你需要注意一般,因为源代码中的Unicode字符不一定会在编译中保留(尽管NSString
完全理解Unicode;这是一个工具链问题而不是运行时问题)。 - Tommy