我是Objective-C(和C本身)的新手,需要從HTTP輸出中使用NSData
。我從來沒有真正使用過字節數組,或者不必擔心小/大端問題,並且努力編寫以下方法來讀取NSNumber
,該指定長度爲NSData
。從NSData中讀取NSNumber
- (NSNumber *)readNumberWithLength:(NSUInteger)length
{
Byte k[length];
[data getBytes:k range:NSMakeRange(offset, length)]; // big endian byte array representing a number
offset += length;
NSNumber *number;
if (length==4) {
number = [NSNumber numberWithUnsignedInt:CFSwapInt32BigToHost(*(uint32_t *)k)];
} else if (length==2) {
number = [NSNumber numberWithUnsignedShort:CFSwapInt16BigToHost(*(uint16_t *)k)];
} else if (length==1) {
number = [NSNumber numberWithUnsignedChar:*(uint8_t *)k];
} else if (length==8) {
number = [NSNumber numberWithUnsignedLongLong:CFSwapInt64BigToHost(*(uint64_t *)k)];
} else {
number = [NSNumber numberWithInt:0];
}
return number;
}
我有NSData *data
和NSUInteger offset
聲明爲實例變量。
此編碼是否正確?有什麼我應該擔心的嗎?我還沒有在實際的設備上測試過它(僅在模擬器上),它似乎對我來說工作得很好。你有什麼意見嗎?
謝謝!
這是一個RESTful API,它真的回答收藏與數百個值(字符串和數字)的。輸出是gziped的,所以它對我有意義。我沒有真正設計服務器,它不會改變,所以我更擔心,如果我的實施是正確的。你認爲有更好的方法來做到這一點?謝謝! – leolobato 2009-11-05 18:41:59
感謝您的提示!我實際上擔心我是如何將字節數組轉換爲nsnumber的,但由於您沒有提到該部分,所以看起來是正確的(或者至少是一種有效的方式)。 :) – leolobato 2009-11-06 15:20:50