// 大端转小端
#define KKL_NTOH(z) sizeof(z) > 4 ? ntohll(z) : ntohl(z)
// 转换为小端 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) {
// 获取长度
NSRange range = NSMakeRange(location, length);
NSData *subdata = [self subdataWithRange:range];
return subdata;
}
return nil;
}
@end
iOS 数字与NSData互转
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 一、起因 在使用Socket编程发送包头给服务器时,需要把int类型数据包装成NSData类型。 二、方案 方案1...
- 1、NSDictionary转NSData 2、NSData转NSDictionary 3、NSDictionar...
- 背景: 当app与硬件交互时,双方写入读取数据的协议都是根据字节位数来的,写入读出数据解析时,使用NSString...