繁体   English   中英

iPhone SDK等效于C#的BitConverter.GetBytes()和BitConverter.ToInt32()

[英]iPhone SDK equivalent to C#'s BitConverter.GetBytes() and BitConverter.ToInt32()

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

我在网络上度过了一段安静的时光,但并没有真正找到我想要的东西,因此,我将非常感谢您提供的任何帮助。

谢谢

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];

有关使C原语访问NSData中包含的二进制内容的详细信息,请参见Ramhound的答案。 最相关的属性是长度和字节,您可能还会对+ dataWithBytes:length:感兴趣,以便从C原语创建一个新的NSData。

无法保证二进制数据将使用多长时间或将使用哪种编码。 您最好向NSNumber询问其以特定格式(例如[number intValue])的内容,将其存储到C原语,并在处理这种级别时使用指向该数字的指针。

你想达到什么目的? Objective-C对象通常不会给你访问他们的二进制数据直接,通常没有理由,除非你试图序列化对象出磁盘上的文件。

NSNumber不会公开此内容,您可以从中要求一个值(即floatValue,doubleValue等),但是除非您使用NSKeyedArchivers archivedDataWithRootObject方法,否则您无法直接访问字节本身。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM