iOS开发二进制数据操作,各种类型与NSData的互转(持续更新)
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小时内删除。