iOS data转换成16进制字符串以及16进制字符串转data
2020-07-16 本文已影响0人
听歌么
NSData转16进制字符串收到NSNull,尝试以下方式都是空值:
[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
[NSString stringWithUTF8String:[data bytes]];
以上获得的新字符就会为nil,这时我们应该这样转:
//十六进制的string为转换data
+ (NSData *) stringToHexData:(NSString *)hexStr
{
int len = [hexStr length] / 2; // Target length
unsigned char *buf = malloc(len);
unsigned char *whole_byte = buf;
char byte_chars[3] = {'\0','\0','\0'};
int i;
for (i=0; i < [hexStr length] / 2; i++) {
byte_chars[0] = [hexStr characterAtIndex:i*2];
byte_chars[1] = [hexStr characterAtIndex:i*2+1];
*whole_byte = strtol(byte_chars, NULL, 16);
whole_byte++;
}
NSData *data = [NSData dataWithBytes:buf length:len];
free( buf );
return data;
}
//data转换为十六进制的string
+ (NSString *)hexStringFromData:(NSData *)myD{
Byte *bytes = (Byte *)[myD bytes];
//下面是Byte 转换为16进制。
NSString *hexStr=@"";
for(int i=0;i<[myD length];i++)
{
NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff];///16进制数
if([newHexStr length]==1)
hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];
else
hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];
}
NSLog(@"hex = %@",hexStr);
return hexStr;
}