// 大端轉(zhuǎn)小端
#define KKL_NTOH(z) sizeof(z) > 4 ? ntohll(z) : ntohl(z)
// 轉(zhuǎn)換為小端 data
#define KKL_CONVERT_DATA(type, targetType) type length = (type)self.length; \
type difference = sizeof(type) - length; \
if (difference > sizeof(type)) { \
difference = 0; \
} \
if (length > sizeof(type)) { \
length = sizeof(type); \
} \
type zero = 0; \
NSMutableData *data = [NSMutableData dataWithBytes:&zero length:sizeof(type)]; \
[data replaceBytesInRange:NSMakeRange(difference, length) withBytes:self.bytes]; \
\
type z; \
[data getBytes:&z length:sizeof(type)]; \
type i = KKL_NTOH(z); \
data = [NSMutableData dataWithBytes:&i length:sizeof(type)]; \
targetType value; \
[data getBytes:&value length:sizeof(targetType)]; \
return value;
@implementation NSData (Number)
- (int)kkl_intValue {
KKL_CONVERT_DATA(uint32_t, int);
}
- (long)kkl_longValue {
KKL_CONVERT_DATA(uint64_t, long);
}
- (float)kkl_floatValue {
KKL_CONVERT_DATA(uint32_t, float);
}
- (instancetype)initWithInt:(int)i {
uint32_t z = KKL_NTOH(i);
NSData *data = [NSData dataWithBytes:&z length:sizeof(i)];
return data;
}
- (instancetype)initWithFloat:(float)f {
NSData *data = [NSData dataWithBytes:&f length:sizeof(f)];
int i = [data kkl_intValue];
uint32_t z = KKL_NTOH(i);
return [self initWithInt:z];
}
- (instancetype)initWithLong:(long)l {
uint64_t z = KKL_NTOH(l);
NSData *data = [NSData dataWithBytes:&z length:sizeof(l)];
return data;
}
- (NSData *)kkl_subdataWithLocation:(NSInteger)location length:(NSInteger)length {
if (location + length <= self.length) {
// 獲取長(zhǎng)度
NSRange range = NSMakeRange(location, length);
NSData *subdata = [self subdataWithRange:range];
return subdata;
}
return nil;
}
@end
iOS 數(shù)字與NSData互轉(zhuǎn)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 一、起因 在使用Socket編程發(fā)送包頭給服務(wù)器時(shí),需要把int類型數(shù)據(jù)包裝成NSData類型。 二、方案 方案1...
- 1、NSDictionary轉(zhuǎn)NSData 2、NSData轉(zhuǎn)NSDictionary 3、NSDictionar...
- NSString -> NSData NSData -> NSString char -> NSData NSDa...
- 背景: 當(dāng)app與硬件交互時(shí),雙方寫入讀取數(shù)據(jù)的協(xié)議都是根據(jù)字節(jié)位數(shù)來(lái)的,寫入讀出數(shù)據(jù)解析時(shí),使用NSString...