2013-03-08 46 views
2

我試圖將字符串轉換爲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

回答

5

在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