29,049
社区成员




/**
* @brief 将字符表示的16进制数转化为二进制数据
*
* @param hexString 字符表示的16进制数,长度必须为偶数
*
* @return 二进制数据
*/
- (NSData *)dataWithHexString:(NSString *)hexString
{
// hexString的长度应为偶数
if ([hexString length] % 2 != 0)
return nil;
NSUInteger len = [hexString length];
NSMutableData *retData = [[[NSMutableData alloc] init] autorelease];
const char *ch = [[hexString dataUsingEncoding:NSASCIIStringEncoding] bytes];
for (int i=0 ; i<len ; i+=2) {
int height=0;
if (ch[i]>='0' && ch[i]<='9')
height = ch[i] - '0';
else if (ch[i]>='A' && ch[i]<='F')
height = ch[i] - 'A' + 10;
else if (ch[i]>='a' && ch[i]<='f')
height = ch[i] - 'a' + 10;
else
// 错误数据
return nil;
int low=0;
if (ch[i+1]>='0' && ch[i+1]<='9')
low = ch[i+1] - '0';
else if (ch[i+1]>='A' && ch[i+1]<='F')
low = ch[i+1] - 'A' + 10;
else if (ch[i+1]>='a' && ch[i+1]<='f')
low = ch[i+1] - 'a' + 10;
else
// 错误数据
return nil;
int byteValue = height*16 + low;
[retData appendBytes:&byteValue length:1];
}
return retData;
}