Objective-C等价于Ruby中的string.unpack('N')

问题描述:

我试图将字符串转换为32位无符号的网络(big-endian)字节顺序。我似乎无法弄清楚如何做到这一点。在Ruby中,我通过string.unpack('N')完成了这个任务 - 但似乎无法在Objective-C中管理这个。有什么建议么?谢谢!Objective-C等价于Ruby中的string.unpack('N')

+1

请注意,Objective-C字符串对象严格用于封装正确编码的字符串,通常是UTF-8或UTF-16字符串。它们不应该用于原始数据(NSData就是这样)。 (我看到很多来自脚本语言的人都对这一点感到困惑) – bbum 2013-03-08 17:35:27

在Objective-C中,您需要将NSString转换为NSData。然后您可以访问NSData对象的字节。

NSString *str = @" H€llö Wòrld"; 
NSData *data = [str dataUsingEncoding:NSUTF32BigEndianStringEncoding]; 
NSLog(@"%@", data); 
// Output: 
// <0001f604 00000020 00000048 000020ac 0000006c 0000006c 000000f6 00000020 00000057 000000f2 00000072 0000006c 00000064> 

const uint8_t *bytes = [data bytes]; // pointer to converted bytes 
NSUInteger length = [data length]; // number of converted bytes 
+0

它是否也关心endianess? – 2013-03-08 16:22:57

+1

@RamyAlZuhouri:是的,'NSUTF32BigEndianStringEncoding'指定了很大的字节顺序。 – 2013-03-08 16:23:43