解決問(wèn)題@"FE010000000429C6"轉(zhuǎn)換為<FE010000 000429C6> ;
先初始化一個(gè)可變Data作最后的輸出結(jié)果:
?NSMutableData*data=[[NSMutableData alloc]init];
NSString*commondStr=@"FE010000000429C6";
64位系統(tǒng)下的做法:? ? ??
unsigned long hexData=strtoul([commondStr UTF8String],NULL,16);
[data appendBytes:&hexData length:sizeof(hexData)];
經(jīng)測(cè)試洋腮,在32位系統(tǒng)的老機(jī)型上輸出均為机错,在64位系統(tǒng)下輸出為歧蒋。
標(biāo)準(zhǔn)做法:? 將方法寫入NSString的擴(kuò)展:
+(NSData*)stringToHexData:(NSString*)hexStr{
unsigned long len=[hexStr length]/2;?????? // Target length??
unsigned char*buf=malloc(len);
unsigned char*whole_byte=buf;
char byte_chars[3]={'\0','\0','\0'};
for(int 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 appendData:[NSString stringToHexData:commondStr]];
附:16進(jìn)制data轉(zhuǎn)會(huì)NSString對(duì)象的方法
+(NSString*)hexStringFromData:(NSData*)myD{
Byte*bytes=(Byte*)[myD bytes];//下面是Byte 轉(zhuǎn)換為16進(jìn)制。? ? NSString*hexStr=@"";
for(int i=0;i<[myD length];i++){
NSString*newHexStr=[NSString stringWithFormat:@"%x",bytes[i]&0xff];? ? ? ? if([newHexStr length]==1){
hexStr=[NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];
} else {
hexStr=[NSString stringWithFormat:@"%@%@",hexStr,newHexStr];
}
return hexStr;
}
鏈接地址:https://segmentfault.com/n/1330000007028397