iOS开发⼆进制数据操作,各种类型与NSData的互转(持续更
新)
⽬录
1、Double 与 NSData的互转
1 double a = 3.14;
2 NSData *longitudeData1 = [NSData dataWithBytes:&a length:8];
3 double *a2 = (double *)longitudeData1.bytes;
4 NSLog(@"a1: %f", a2[0]);
2、Float 与 NSData的互转
1 float b = 3.1415;帝国时代2hd联机
2 NSData *longitudeData2 = [NSData dataWithBytes:&b length:4];
3 float *b2 = (float *)longitudeData2.bytes;
4 double b3 = (double)b2[0];
5 NSLog(@"b2: %f, b3: %f", b2[0], b3);
3、NSData的安全截取
1+ (NSData*)data:(NSData*)data R:(NSInteger)index L:(NSInteger)length {
2 NSData *mData = nil;
3 if (length <= 0) return mData;
4
5 if (index + length <= data.length) {
6 mData = [data subdataWithRange:NSMakeRange(index, length)];
7 } else {
8 if (index < data.length) {
9 mData = [data subdataWithRange:NSMakeRange(index, data.length - index)];
10 }
11 }
12 return mData;
13}
4、⼤⼩端转换
1+ (NSData*)changeBigOrSmall:(NSData*)data {
2 NSMutableData *mData = [NSMutableData new];
3 for (NSInteger i = data.length - 1; i >= 0; i--) {
4 [mData appendBytes:&[data bytes][i] length:1];
5 }
6 return mData;
7}
5、16进制的字符串变成NSData
2 @"ffff0000" 转成 <ffff 0000>,16进制的字符串变成NSData。
3
4 @param hex 类似@"ffff0000"
5 @return NSData类型 => <ffff 0000>
6 */
7+ (NSMutableData*)HexToData:(NSString*)hex {
8 NSString *command = hex;
9 command = [command stringByReplacingOccurrencesOfString:@" " withString:@""];
10 NSMutableData *commandToSend= [[NSMutableData alloc] init];
11 unsigned char whole_byte;
12 char byte_chars[3] = {'\0','\0','\0'};
13 int i;
14 for (i=0; i < [command length]/2; i++) {
运动会作文600字15 byte_chars[0] = [command characterAtIndex:i*2];
16 byte_chars[1] = [command characterAtIndex:i*2+1];高考满分900
17 whole_byte = strtol(byte_chars, NULL, 16);
18 [commandToSend appendBytes:&whole_byte length:1];
19 }
20 return commandToSend;
21}
6、NSData转NSString(源数据字符串,不涉及编解码)
1+ (NSString*)stringFromData:(NSData*)data {
2 if (data.length == 0) {
3 return @"";
4 }
5 NSMutableString *newString = [NSMutableString new];
6 uint8_t *buffer = (uint8_t *)[data bytes];
7 for (int i = 0; i < data.length; i++) {
8 NSString *str = [NSString stringWithFormat:@"%x",buffer[i]];
9 if (str.length == 1) {
10 [newString appendFormat:@"0%@",str];
11 } else {
12 [newString appendString:str];
13 }
14 }
15 return newString;
16}
7、NSString转int
2+ (int)intFromString:(NSString*)string {
3 int temp = [string intValue];
4 if ([string isEqual:@"a"] || [string isEqual:@"A"]) {
5 temp = 10;
6 } else if ([string isEqual:@"b"] || [string isEqual:@"B"]) {
7 temp = 11;
8 } else if ([string isEqual:@"c"] || [string isEqual:@"C"]) {
9 temp = 12;
10 } else if ([string isEqual:@"d"] || [string isEqual:@"D"]) {
11 temp = 13;
12 } else if ([string isEqual:@"e"] || [string isEqual:@"E"]) {
13 temp = 14;
14 } else if ([string isEqual:@"f"] || [string isEqual:@"F"]) {
15 temp = 15;
16 }
17 return temp;
18}
8、NSData转NSInteger
1+ (NSInteger)integerFromData:(NSData*)data {
2 if (data == nil) return 0;
3
4 NSInteger temp;
5 double sum = 0.0;
6 NSString *string = [self stringFromData:data];
7 NSInteger length = string.length;
8
9 for (int i = 0; i < length; i++) {
10 NSString * tempStr = [string substringWithRange:NSMakeRange(i, 1)];
11 int tempInt = [self intFromString:tempStr];
12 double tempDouble = tempInt * pow(16.0, (double)(length - 1 - i));
13 sum = sum + tempDouble;
14 }
15
16 temp = (NSInteger)sum;
17 return temp;
18}
9、uint8_t与NSData互转
1uint8_t versionBuf[1] = {0x00};
2NSData *versionData = [NSData dataWithBytes:versionBuf length:1];
3
4+ (NSData *)uInt8_data:(uint8_t)value {
5 char buf[1] = {value};
6 NSData *data = [NSData dataWithBytes:buf length:1];
五一劳动节手抄报画7 return data;
8}
9
10+ (uint8_t)uint8FromData:(NSData *)data {
11 uint8_t *k = (uint8_t *)data.bytes;
12 return k[0];
13}
10、UInt16与NSData互转
5 }
6 return data;
7}
8
9+ (NSData*)uInt16_data:(uint16_t)value {
10 NSData *data = [NSData dataWithBytes:&value length:2];
11 return data;
12}
13
14
15- (UInt16)littleUint16FromData:(NSData *)data {
16 UInt16 *k = (UInt16 *)data.bytes;
17 return k[0];
18}
19
20- (UInt16)bigendUint16FromData:(NSData *)data {
21 UInt16 *k = (UInt16 *)data.bytes;
22 return ntohs(k[0]);
23}
11、UInt32与NSData互转
1+ (NSData*)uInt32_data:(uint32_t)value Endian:(BOOL)endian {
2 NSData *data = [self uInt32_data:value];
3 if (endian == YES) {
4 data = [self changeBigOrSmall:data];
5 }
6 return data;
7}
8
9+ (NSData*)uInt32_data:(uint32_t)value {
10 NSData *data = [NSData dataWithBytes:&value length:4];
11 return data;
12}
13
14+ (UInt32)littleUint32FromData:(NSData *)data {
15 UInt32 *k = (UInt32 *)data.bytes;
16 return k[0];
17}
18
19+ (UInt32)bigendUint32FromData:(NSData *)data {
20 UInt32 *k = (UInt32 *)data.bytes;
21 return ntohl(k[0]);
22}
12、UInt64与NSData互转
5 }
6 return data;
7}
8
9+ (NSData*)uInt64_data:(uint64_t)value {
10 NSData *data = [NSData dataWithBytes:&value length:8];
11 return data;
12}
13
14+ (UInt64)littleUint64FromData:(NSData *)data {
15 UInt64 *k = (UInt64*)data.bytes;
16 return k[0];
17}
科学养猪18
19+ (UInt64)bigendUint64FromData:(NSData *)data {
20 UInt64 *k = (UInt64*)data.bytes;
21 return htonll(k[0]);
22}
13、清除EOF
1+ (NSData*)cleanEOF:(NSData*)data {
2 if (data.length == 0) return nil;
3 NSData *eofData = [self HexToData:@"00"];
4
5 NSData *lastData = [data subdataWithRange:NSMakeRange(data.length-1, 1)];
6 if ([lastData isEqualToData:eofData]) {
仙剑奇侠传四全攻略7 NSData *outData = [data subdataWithRange:NSMakeRange(0, data.length-1)];
8 return outData;
9 } else {
10 return data;
11 }
12}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论