iOS开发水平不高,但是最近公司在做蓝牙开发,无奈中强迫搜集了很多进制,字符串及NSData的转换方法,今天总结了下!
1 获得字符串的长度:
-(int)convertToInt:(NSString*)strtemp {
int strlength = 0;
char* p = (char*)[strtemp cStringUsingEncoding:NSUnicodeStringEncoding];
for (int i=0 ; i<[strtemp lengthOfBytesUsingEncoding:NSUnicodeStringEncoding] ;i++) {
if (*p) {
p++;
strlength++;
}
else {
p++;
}
}
return (strlength+1)/2;
}
2 10进制转16进制:
-(NSString *)ToHex:(long long int)tmpid
{
NSString *nLetterValue;
NSString *str =@"";
long long int ttmpig;
for (int i = 0; i<9; i++) {
ttmpig=tmpid%16;
tmpid=tmpid/16;
switch (ttmpig)
{
case 10:
nLetterValue =@"A";break;
case 11:
nLetterValue =@"B";break;
case 12:
nLetterValue =@"C";break;
case 13:
nLetterValue =@"D";break;
case 14:
nLetterValue =@"E";break;
case 15:
nLetterValue =@"F";break;
default:nLetterValue=[[NSString alloc]initWithFormat:@"%lli",ttmpig];
}
str = [nLetterValue stringByAppendingString:str];
if (tmpid == 0) {
break;
}
}
return str;
}
3 16进制转换成十进制:
- (NSString *)to10:(NSString *)num
{
NSString *result = [NSString stringWithFormat:@"%ld", strtoul([num UTF8String],0,16)];
return result;
}
- (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 < [str length]; i += 2) {
unsigned int anInt;
NSString *hexCharStr = [str substringWithRange:range];
NSScanner *scanner = [[NSScanner alloc] initWithString:hexCharStr];
[scanner scanHexInt:&anInt];
NSData *entity = [[NSData alloc] initWithBytes:&anInt length:1];
[hexData appendData:entity];
range.location += range.length;
range.length = 2;
}
NSLog(@"hexdata: %@", hexData);
return hexData;
}
5 字符串转换16进制:
-(NSString *)hexStringFromString:(NSString *)string{
NSData *myD=[string dataUsingEncoding:NSUTF8StringEncoding];
Byte *bytes=(Byte *)[myD bytes];
//byte-16
NSString *hexStr=nil;
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;
}
6 16进制字符串转byte格式
-(NSData*) hexToBytes:(NSString *)str{
NSMutableData* data = [NSMutableData data];
int idx;
for (idx = 0; idx+2 <= str.length; idx+=2) {
NSRange range = NSMakeRange(idx, 2);
NSString* hexStr = [str substringWithRange:range];
NSScanner* scanner = [NSScanner scannerWithString:hexStr];
unsigned int intValue;
[scanner scanHexInt:&intValue];
[data appendBytes:&intValue length:1];
}
return data;
}
高低位互换(俩字节的)
unsigned short int a=0xa55a;
unsigned short int b=((a&0x00ff)<<8)|(a>>8);
NSLog(@"%d",b);
字符串高低位互换
-(NSMutableString *)transform:(NSString *)string{
NSMutableString *newStr = [NSMutableString string];
NSInteger length = string.length;
for (int i = 0; i < length / 2; i++) {
NSString *str1 = [string substringWithRange:NSMakeRange(length - (i+1) * 2 , 2)];
[newStr insertString:str1 atIndex:i * 2];
}
return newStr;
}
8 字符串补零操作
-(NSString *)addZero:(NSString *)str withLength:(int)length{
NSString *string=nil;
if (str.length<length) {
for (int i=0;i<length-str.length; i++) {
string=[NSString stringWithFormat:@"0%@",str];
str=string;
}
}
return string;
}
9 16进制转ascii码
- (int)inspection {
int temp = 0;
NSString *hexString = [NSString stringWithFormat:@"51%@%@",_blueToothName,_keyId];
for(int i=0;i<[hexString length];i++)
{
int int_ch;
unichar hex_char1 = [hexString characterAtIndex:i]; 两位16进制数中的第一位(高位*16)
int int_ch1;
if(hex_char1 >= '0' &&hex_char1 <='9')
int_ch1 = (hex_char1-48)*16; 0 的Ascll - 48
else if(hex_char1 >= 'A' &&hex_char1 <='F')
int_ch1 = (hex_char1-55)*16; A 的Ascll - 65
else
int_ch1 = (hex_char1-87)*16; a 的Ascll - 97
i++;
unichar hex_char2 = [hexString characterAtIndex:i]; ///两位16进制数中的第二位(低位)
int int_ch2;
if(hex_char2 >= '0' &&hex_char2 <='9')
int_ch2 = (hex_char2-48); 0 的Ascll - 48
else if(hex_char2 >= 'A' &&hex_char2 <='F')
int_ch2 = hex_char2-55; A 的Ascll - 65
else
int_ch2 = hex_char2-87; a 的Ascll - 97
int_ch = int_ch1+int_ch2;
temp = temp ^ int_ch;
}
NSString *hexString11 = [NSString stringWithFormat:@"%@",[[NSString alloc] initWithFormat:@"%1x",temp]];
NSLog(@"+++++%@",hexString11);
return temp;
}
(1)十六进制转换为普通字符串
-(NSData *)getByte16FromString:(NSString *)str length:(NSInteger)length{
SignedByte bytes[length];
for (int i=0; i<length;i++) {
int j=i*2;
NSString *tmp=[str substringWithRange:NSMakeRange(j, 2)];
unsigned int anInt;
NSScanner * scanner = [[NSScanner alloc] initWithString:tmp];
[scanner scanHexInt:&anInt];
bytes[i]=anInt;
}
return [NSData dataWithBytes:bytes length:length];
}
(2) 十六进制转换为普通字符串的。
+ (NSString *)stringFromHexString:(NSString *)hexString { //
char *myBuffer = (char *)malloc((int)[hexString length] / 2 + 1);
bzero(myBuffer, [hexString length] / 2 + 1);
for (int i = 0; i < [hexString length] - 1; i += 2) {
unsigned int anInt;
NSString * hexCharStr = [hexString substringWithRange:NSMakeRange(i, 2)];
NSScanner * scanner = [[[NSScanner alloc] initWithString:hexCharStr] autorelease];
[scanner scanHexInt:&anInt];
myBuffer[i / 2] = (char)anInt;
}
NSString *unicodeString = [NSString stringWithCString:myBuffer encoding:4];
NSLog(@"------字符串=======%@",unicodeString);
return unicodeString;
}
输出16个同样的数字 转化为data
-(NSData *)nslogData:(NSString *)str{
NSMutableString *string=[[NSMutableString alloc]init];
for (int i=0; i<32;i++) {
[string appendString:str];
}
NSData *data=[[NSData alloc]init];
data=[NSStringTool convertHexStrToData:string];
return data;
}