其中将十六进制字符串转换成NSData的代码如下:
-
- (NSData *)convertHexStrToData:(NSString *)str {
-
if (!str || [str length] == 0) {
-
return nil;
-
}
-
NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:8];
-
NSRange range;
-
if ([str length] % 2 == 0) {
-
range = NSMakeRange(0, 2);
-
} else {
-
range = NSMakeRange(0, 1);
-
}
-
for (NSInteger i = range.location; i < [strlength]; i+= 2){
-
unsignedintanInt;
-
NSString*hexCharStr= [strsubstringWithRange:range];
-
NSScanner*scanner= [[NSScanneralloc] initWithString:hexCharStr];
-
[scannerscanHexInt:&anInt];
-
NSData*entity= [[NSDataalloc] initWithBytes:&anIntlength:1];
-
[hexDataappendData:entity];
-
range.location+= range.length;
-
range.length= 2;
-
}
-
LEDEBUG(@"hexdata:%@", hexData);
-
returnhexData;
-
}
将NSData转换成十六进制的字符串则可使用如下方式:
-
- (NSString *)convertDataToHexStr:(NSData *)data {
-
if (!data || [data length] == 0) {
-
return @"";
-
}
-
NSMutableString *string = [[NSMutableString alloc] initWithCapacity:[data length]];
-
[data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {
-
unsigned char *dataBytes = (unsigned char*)bytes;
-
for (NSInteger i = 0; i < byteRange.length; i++) {
-
NSString*hexStr= [NSStringstringWithFormat:@"%x", (dataBytes[i]) & 0xff];
-
if([hexStrlength] == 2){
-
[stringappendString:hexStr];
-
} else{
-
[stringappendFormat:@"0%@", hexStr];
-
}
-
}
-
}];
-
returnstring;
-
}