iPhone SDK相当于C#的BitConverter.GetBytes()和BitConverter.ToInt32()

时间:2011-02-22 14:27:53

标签: c# iphone objective-c sdk

我有一个相当简单的问题,那就是如何从NSNumber获取字节并将它们转换回NSNumber。基本上我正在寻找的是Objective-c相当于C#的Bitconverter.GetBytes()和BitConverter.ToInt32(startIndex,length)

我已经花了一些时间来安静地搜索网络但却没有找到我想要的东西,所以我真的很感激任何帮助。

由于

2 个答案:

答案 0 :(得分:0)

NSNumber可能包含int,float,double,bool或其他一些东西。所以二进制版本需要存储类型和值。这意味着您要存档(或者,如果您愿意,可以序列化)。考虑到这一点,您对NSCoding协议感兴趣。

NSNumber响应NSCoding,因此您可以使用以下内容:

NSNumber *aNumber = ...wherever this comes from...;
NSData *dataBlob = [NSKeyedArchiver archivedDataWithRootObject:aNumber];

/* and, later; this will return an autoreleased object so you quite possibly want
   to retain it */
NSNumber *number = [NSKeyedUnarchiver unarchiveObjectWithData:dataBlob];

请参阅Ramhound的答案,了解有关获取NSData中包含的二进制内容的C原语访问的详细信息。最相关的属性是长度和字节,你可能也会对+ dataWithBytes:length:从C基元创建一个新的NSData感兴趣。

无法保证二进制数据的长度或使用的编码方式。你最好以特定的格式(例如[number intValue])询问NSNumber的内容,将其存储到C原语中,如果你正在处理那种级别,则使用指针。

答案 1 :(得分:0)

你想要完成什么? Objective-C对象通常不会让您直接访问其二进制数据,除非您尝试将对象序列化到磁盘上的文件,否则通常没有理由。

NSNumber不公开这个,你可以从中请求一个值(即floatValue,doubleValue等),但除非你使用NSKeyedArchivers archivedDataWithRootObject方法,否则你不能直接访问字节本身。