我想知道是否存在與.Net的BitConverter.GetBytes()方法相同的Objective C。Objective C BitConverter Equivalent
例如,在C#,我可以寫這樣的事:
字節[] lengthPrefix = BitConverter.GetBytes(message.length);
目標C中的等效項目是什麼?
一些示例代碼將不勝感激。
在此先感謝。
我想知道是否存在與.Net的BitConverter.GetBytes()方法相同的Objective C。Objective C BitConverter Equivalent
例如,在C#,我可以寫這樣的事:
字節[] lengthPrefix = BitConverter.GetBytes(message.length);
目標C中的等效項目是什麼?
一些示例代碼將不勝感激。
在此先感謝。
如果您不需要特定字節序:
unsigned char * lengthPrefix = (unsigned char *)&message.length;
或者複製到32位的緩衝區,如果需要的話。
unsigned char lengthPrefixBuffer[4];
memcpy(lengthPrefixBuffer, &message.length, 4);
Sin Objective-C是C的根源,你可以使用按位運算符來完成類似的事情。
COCOA/COCOA-TOUCH框架上沒有任何東西可以自動爲你做(比如.NET的BitConverter)。
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,您可能需要更多。
您正在獲取臨時返回的整數的地址。這是否編譯?它可能在一個寄存器中...... 'NSInteger length = message.length; unsigned char * lengthPrefix =(unsigned char *)&length;' – 2010-05-28 13:02:31
+1雖然不是很漂亮應該可以工作(NSInteger == long),儘管我可能會在memcpy版本中使用sizeof。 – 2010-05-28 13:11:01
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