有一个特殊的NSString
initWithData
抓取位并将它们转换为字符串的方法。但是,我还没有发现在NSNumber
类的ref。目前,我以NSData
格式从服务器获取原始数据(字节)。我知道如何在C中使用memcpy
和int
指针。但我很好奇从NSData
直接做什么方便的方法。不需要转换。例如,我得到00000010
字节,我需要将它转换为值为2的NSNumber
或NSInteger
。如何将NSData字节转换为NSNumber或NSInteger?
回答
NSData
只是一个字节桶,并且不知道其中包含的数据。 NSString
的initWithData:encoding:
方法是倒数(它对面)这个方法:
- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding
因此,要完全回答你的问题,是要知道你的号码最初是如何强迫一个NSData
对象是很重要的。一旦你知道了编码函数,搜索就是用于相互函数的。
从问题中包含的内容可能会有许多不同的解决方案。但是,您可能可以使用以下行中的某些内容将您的NSData对象上的getBytes:length:
转换为可用的数字格式。对于例如
NSUInteger decodedInteger;
[myDataObject getBytes:&decodedInteger length:sizeof(decodedInteger)];
你可以改变的decodedInteger
到任何适合你NSData
对象的字节类型。
如果您的对象包含多个值,那么您需要使用'NSRange'来提取每个单独的值,并使用'sizeof()'函数来移动整个数据的范围。 – ikuramedia 2012-02-10 08:51:17
谢谢,它与getBytes一起工作。虽然它与我所期望的“initWithData”不一样,但它仍然比普通的c更像“objective-c”风格。 – Centurion 2012-02-10 09:16:49
@Centurion当以这种方式序列化字节时,您应该始终考虑到字节序。请参阅Foundation/NSByteOrder.h中的'NSSwap ...'系列函数。 – Costique 2012-02-10 09:26:47
试试这个:
NSNumber *num = [NSKeyedUnarchiver unarchiveObjectWithData:numberAsNSData];
编辑:
正如马蒂亚斯·鲍赫指出,这不会工作你的情况。这只适用于你的NSNumber对象被归档到NSData对象中。
,它只适用于归档到NSData对象中的NSNumber对象,其中 – 2012-02-10 08:29:04
为true。感谢您指出了这一点。编辑回复 – mbh 2012-02-10 08:32:27
下面是答案
//Integer to NSData
+(NSData *) IntToNSData:(NSInteger)data
{
Byte *byteData = (Byte*)malloc(4);
byteData[3] = data & 0xff;
byteData[2] = (data & 0xff00) >> 8;
byteData[1] = (data & 0xff0000) >> 16;
byteData[0] = (data & 0xff000000) >> 24;
NSData * result = [NSData dataWithBytes:byteData length:4];
NSLog(@"result=%@",result);
return (NSData*)result;
}
的NSString救援:
const unsigned char *bytes = [serverData bytes];
NSInteger aValue = [NSString stringWithFormat:@"%2x", bytes[0]].integerValue;
的文档警告使用NSScanner本地化十进制数,但是这是在这种情况下不用担心。
- 1. 将NSData转换为字节
- 2. 是否可以将NSInteger转换为NSNumber?
- 3. 转换的NSNumber到NSInteger的
- 4. 将NSArray的字节转换为NSData
- 5. 将NSArray的字节值转换为NSData
- 6. 将NSData字节转换为NSString?
- 7. 如何将NSinteger转换为字符串
- 8. 如何将NSData转换为NSArray(或NSObject)
- 9. 如何将NSInteger或NSString转换为二进制(字符串)值
- 10. 如何将字节从NSDATA转换为BigInt16?
- 11. objective c - 如何将nsdata转换为字节数组
- 12. Swift:将Int16转换为Int32(或NSInteger)
- 13. 如何将一个double转换为NSInteger?
- 14. 如何将NSString的值转换为NSInteger
- 15. 如何将NSIndexPath转换为NSInteger?
- 16. 如何将NSInteger转换为NSTimeInterval
- 17. 如何将NSString转换为NSInteger
- 18. 如何将NSDecimalNumber转换为NSInteger?
- 19. 如何将NSDecimal值转换为NSInteger值?
- 20. 如何将NSInteger转换为NSTimeInterval
- 21. 如何将字节[]转换为字节[]
- 22. 如何将NSData中的NSData转换为字符串?
- 23. 如何将typedef枚举转换为NSNumber?
- 24. 如何将UITextField的值转换为NSNumber?
- 25. 如何将NSNumber转换为NSString
- 26. 如何将nsnumber转换为浮点数
- 27. 如何将NSDecimalNumber转换为NSNumber
- 28. 将NSNumber与NSInteger比较
- 29. 将NSData字节数组转换为字符串?
- 30. 将NSNumber转换为Double(CLLocationDegrees)
如果您知道如何在c中执行此操作,则可以在objective-c中执行此操作。只需使用这些方法。用'[myNSData bytes]'获取原始字节。如果你想要,你可以为NSNumber创建一个类别,这样你就可以使用initWithData: – 2012-02-10 08:30:08