有一個特殊的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. 是否可以將NSInteger轉換爲NSNumber?
- 2. 瞭解語法(將NSInteger轉換爲NSNumber)
- 3. 將NSData轉換爲字節
- 4. 轉換的NSNumber到NSInteger的
- 5. 如何將NSinteger轉換爲字符串
- 6. 將NSArray的字節轉換爲NSData
- 7. 將NSArray的字節值轉換爲NSData
- 8. 將NSData字節轉換爲NSString?
- 9. 將NSData轉換爲base64encoded並將字節數組轉換爲C#
- 10. 如何將NSData轉換爲NSArray(或NSObject)
- 11. 如何將UIImage轉換爲NSData或CFDataRef?
- 12. 轉換NSInteger的以字節
- 13. 如何將NSInteger或NSString轉換爲二進制(字符串)值
- 14. 如何將NSData轉換爲字符?
- 15. 如何將字節從NSDATA轉換爲BigInt16?
- 16. objective c - 如何將nsdata轉換爲字節數組
- 17. Swift:將Int16轉換爲Int32(或NSInteger)
- 18. 如何將UIImage或NSData轉換爲字節數組併發布到服務器?
- 19. 如何將NSDecimalNumber轉換爲NSInteger?
- 20. 如何將一個double轉換爲NSInteger?
- 21. 如何將NSIndexPath轉換爲NSInteger?
- 22. 如何將NSInteger轉換爲NSTimeInterval
- 23. 如何將NSString轉換爲NSInteger
- 24. 如何將NSString的值轉換爲NSInteger
- 25. 如何將NSDecimal值轉換爲NSInteger值?
- 26. 如何將NSInteger轉換爲NSTimeInterval
- 27. 如何將字節[]轉換爲字節[]
- 28. 如何將NSData中的NSData轉換爲字符串?
- 29. 將NSInteger轉換爲NSIndexpath
- 30. 將CFIndex轉換爲NSInteger
如果您知道如何在c中執行此操作,則可以在objective-c中執行此操作。只需使用這些方法。用'[myNSData bytes]'獲取原始字節。如果你想要,你可以爲NSNumber創建一個類別,這樣你就可以使用initWithData: – 2012-02-10 08:30:08