2010-05-28 70 views
2

我想知道是否存在與.Net的BitConverter.GetBytes()方法相同的Objective C。Objective C BitConverter Equivalent

例如,在C#,我可以寫這樣的事:

字節[] lengthPrefix = BitConverter.GetBytes(message.length);

目標C中的等效項目是什麼?

一些示例代碼將不勝感激。

在此先感謝。

回答

2

如果您不需要特定字節序:

unsigned char * lengthPrefix = (unsigned char *)&message.length; 

或者複製到32位的緩衝區,如果需要的話。

unsigned char lengthPrefixBuffer[4]; 
memcpy(lengthPrefixBuffer, &message.length, 4); 
+0

您正在獲取臨時返回的整數的地址。這是否編譯?它可能在一個寄存器中...... 'NSInteger length = message.length; unsigned char * lengthPrefix =(unsigned char *)&length;' – 2010-05-28 13:02:31

+0

+1雖然不是很漂亮應該可以工作(NSInteger == long),儘管我可能會在memcpy版本中使用sizeof。 – 2010-05-28 13:11:01

+0

Foundation中有大量的函數用於執行endian相關的字節交換。 http://developer.apple.com/mac/library/documentation/cocoa/reference/foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#jumpTo_181 – JeremyP 2010-05-28 13:15:36

0

Sin Objective-C是C的根源,你可以使用按位運算符來完成類似的事情。

COCOA/COCOA-TOUCH框架上沒有任何東西可以自動爲你做(比如.NET的BitConverter)。

0

byte [] lengthPrefix = BitConverter.GetBytes(message.length); 等價物,這將是

long ID = length; 
Byte *some = (Byte*)&ID; 
    Byte b1 = some[0]; 
    Byte b2 = some[1]; 
    Byte b3 = some[2]; 
    Byte b4 = some[3]; 
Byte lengthPrefix[]= {b1,b2,b3,b4}; 

主要的想法你有多少字節需要... 此操作之前,這樣的地方指定你想要的長度和多少字節你想要的。所以很長時間就足夠了4個字節。對於uint32,您可能需要更多。