美文网首页
进制转换

进制转换

作者: 丿ZLoveT | 来源:发表于2017-07-21 10:36 被阅读29次

#pragma mark -从字符串中取字节数组

-(NSData*)stringToByte:(NSString*)string{

NSString *hexString=[[string uppercaseString] stringByReplacingOccurrencesOfString:@" " withString:@""];

if ([hexString length]%2!=0) {

return nil;

}

Byte tempbyt[1]={0};

NSMutableData* bytes=[NSMutableData data];

for(int i=0;i<[hexString length];i++){

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

return nil;

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

return nil;

tempbyt[0] = int_ch1+int_ch2;  ///将转化后的数放入Byte数组里

[bytes appendBytes:tempbyt length:1];

}

return bytes;

}


#pragma mark - 十六进制转化为Byte数组

- (NSData *)pppp:(NSString *)str{

NSString *hexString = str; //16进制字符串

int j=0;

Byte bytes[1024];

///3ds key的Byte 数组, 128位

for(int i=0;i<[hexString length];i++){

int int_ch;  /// 两位16进制数转化后的10进制数

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_char1 >= 'A' && hex_char1 <='F')

int_ch2 = hex_char2-55; //// A 的Ascll - 65

else

int_ch2 = hex_char2-87; //// a 的Ascll - 97

int_ch = int_ch1+int_ch2;

NSLog(@"int_ch=%d",int_ch);

bytes[j] = int_ch;  ///将转化后的数放入Byte数组里

j++;

}

NSData *newData = [[NSData alloc] initWithBytes:bytes length:128];

NSLog(@"newData=%@",newData);

return newData;

}


#pragma mark - ASCll转十六进制

- (Byte)ASCLL_HEX:(unsigned char)aHex{

if((aHex>=0)&&(aHex<=9))

aHex += 0x30;

else if((aHex>=10)&&(aHex<=15))//A-F

aHex += 0x37;

else aHex = 0xff;

return aHex;

}


#pragma mark - 十进制转化为十六进制

- (NSString *)ToHex:(uint16_t)tmpid{

NSString *nLetterValue;

NSString *str =@"";

uint16_t 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 stringWithFormat:@"%u",ttmpig];

}str = [nLetterValue stringByAppendingString:str];

if (tmpid == 0) {

break;

}

}return str;

}


#pragma mark - 16进制转10进制

+ (NSNumber *) numberHexString:(NSString *)aHexString{

if (nil == aHexString){

return nil;

}

NSScanner * scanner = [NSScanner scannerWithString:aHexString];

unsigned long long longlongValue;

[scanner scanHexLongLong:&longlongValue];

//将整数转换为NSNumber,存储到数组中,并返回.

NSNumber * hexNumber = [NSNumber numberWithLongLong:longlongValue];

return hexNumber;

}


#pragma mark - 字符串转十六进制

+ (NSString *) stringToHex:(NSString *)str{

NSUInteger len = [str length];

unichar *chars = malloc(len * sizeof(unichar));

[str getCharacters:chars];

NSMutableString *hexString = [[NSMutableString alloc] init];

for(NSUInteger i = 0; i < len; i++ ){

[hexString appendString:[NSString stringWithFormat:@"%x", chars[i]]];

}free(chars);

return hexString;

}


#pragma mark - 字符串转十六进制

+ (NSString *)convertStringToHexStr:(NSString *)str {

if (!str || [str length] == 0) {

return @"";

}

NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

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 = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff];

if ([hexStr length] == 2) {

[string appendString:hexStr];

} else {

[string appendFormat:@"0%@", hexStr];

}

}

}];return string;

}


#pragma mark 字符串转十六进制

+ (NSString *)hexStringFromString:(NSString *)string{

NSData *myD = [string dataUsingEncoding:NSUTF8StringEncoding];

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];

}return hexStr;

}

相关文章

  • 【iOS 开发】二进制、十进制、十六进制相互转换的方法

    十进制转换为二进制 十进制转换为十六进制 二进制转换为十六进制 十六进制转换为二进制 二进制转换为十进制 作者:J...

  • python 的进制转换

    十进制, 二进制相互转换 十进制转换为二进制 二进制转换为十进制 十进制, 八进制相互转换 十进制转换为八进制 八...

  • Flutter 进制转换

    10进制转换位16进制 16进制转换位10进制

  • c#学习(一)进制初步认识

    进制转换进制转换表.jpg 二进制的转换 十进制转2进制/8进制/16进制 2进制/8进制/16进制/转十进制 2...

  • python 各种进制的转换

    转换二进制: bin()函数 转换十进制:int()函数 转换十六进制:hex()函数 转换8进制:oct()函数

  • 进制转换

    十进制转换为二进制 185 = 10111001 十进制转换为八进制 185=271 十进制转换为十六进制 185...

  • iOS开发中的进制转换

    进制转换 开发中常用的进制有二进制、十进制、十六进制,此文章旨在说明进制转换的规则、流程;最后用OC写了进制转换的...

  • python 进制转换

    如何表示二进制 任意进制之间的转换 任意进制转换成二进制--bin 任意进制转换成十进制--int 3.任意进制转...

  • python-基础篇练习题

    通过代码实现如下转换:二进制转换成十进制:v = “0b1111011”十进制转换成二进制:v = 18八进制转换...

  • iOS进制之间转换

    1 进制的转换(一) 1.1 问题 完成以下数字的进制转换: 35转换成二进制; 101101 转换成十进制; 1...

网友评论

      本文标题:进制转换

      本文链接:https://www.haomeiwen.com/subject/twiskxtx.html