现在的位置: 首页 > 综合 > 正文

【iOS】二进制十进制十六进制转换器

2018年04月22日 ⁄ 综合 ⁄ 共 4675字 ⁄ 字号 评论关闭

还是那句话,没有第一时间在网上找到想要的参考代码,就自己动手做了一个。

总感觉进制转换应该有系统方法,哪位大神若知道还请不吝赐教。

//
//  MainViewController.m
//  Computer
//
//  Created by 杜子兮 on 13-12-17.
//  Copyright (c) 2013年 莲兮奈若何. All rights reserved.
//

#define OX 10
#define OY 120
#define INNER 5
#define WIDTH 45
#define HEIGHT 45

#import "MainViewController.h"

@implementation MainViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(0, 20, 320, 50)];
    
    label.text = @" 进制转换器 ";
    label.textAlignment = NSTextAlignmentCenter;
    [self.view addSubview:label];
    [label release];
    
    _textField = [[UILabel alloc]initWithFrame:CGRectMake(OX, 70, 320 - OX * 2, 40)];
    //_textField.borderStyle = UITextBorderStyleRoundedRect;
    _textField.textAlignment = NSTextAlignmentRight;
    [_textField setBackgroundColor:[UIColor lightGrayColor]];
    [self.view addSubview:_textField];
    
    CGRect rect = CGRectMake(OX, OY , WIDTH, HEIGHT);
    
    //数字按键
    for (int i = 0; i < 16; i++) {
        UIButton * bt = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        [bt setTag:i];
        [bt setFrame:rect];
        
        NSString * title = [[NSString alloc]init];
        if (i < 10) {
            title = [NSString stringWithFormat:@"%d",i];
        }else{
            title = [NSString stringWithFormat:@"%c",'A' + i - 10];
        }
        
        [bt setTitle:title forState:UIControlStateNormal];
        [bt.layer setMasksToBounds:YES];
        [bt.layer setCornerRadius:10.0]; //设置矩形四个圆角半径
        [bt setBackgroundColor:[UIColor orangeColor]];
        [bt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [bt addTarget:self action:@selector(numInput:) forControlEvents:UIControlEventTouchUpInside];
        
        [self.view addSubview:bt];
        [bt release];
        
        if (((i + 1) % 5 == 0) && (i != 14)) {
            rect.origin.y += HEIGHT + INNER;
            rect.origin.x = OX;
        }else{
            rect.origin.x += WIDTH + INNER;
        }
    }
    
    //取消按键
    rect.origin.y -= (HEIGHT + INNER) * 2;
    rect.origin.x -= WIDTH + INNER;
    
    UIButton * bt = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [bt setTag:30];
    [bt setFrame:rect];
    [bt setTitle:@"C" forState:UIControlStateNormal];
    [bt.layer setMasksToBounds:YES];
    [bt.layer setCornerRadius:10.0]; //设置矩形四个圆角半径
    [bt setBackgroundColor:[UIColor blueColor]];
    [bt setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    [bt addTarget:self action:@selector(clean) forControlEvents:UIControlEventTouchUpInside];
    
    [self.view addSubview:bt];
    [bt release];
    
    rect = CGRectMake(OX + INNER, OY + (WIDTH + INNER) * 4, WIDTH * 3, HEIGHT / 1.5);
    
    //进制转换按钮
    
    int tag = 21;
    NSArray * btArray = [NSArray arrayWithObjects:@"二进制转十进制",
                                                  @"十进制转二进制",
                                                  @"二进制转十六进制",
                                                  @"十六进制转二进制",
                                                  @"十进制转十六进制",
                                                  @"十六进制转十进制", nil];
    
    for (int i = tag; i < tag + 6; i++) {
        
        UIButton * btTurn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        btTurn.tag = i;
        btTurn.frame = rect;
        [btTurn setTitle:[btArray objectAtIndex:i - 21] forState:UIControlStateNormal];
        [btTurn.layer setMasksToBounds:YES];
        [btTurn.layer setCornerRadius:10.0]; //设置矩形四个圆角半径
        [btTurn setBackgroundColor:[UIColor darkGrayColor]];
        [btTurn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
        [btTurn addTarget:self action:@selector(numTurn:) forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:btTurn];
        [btTurn release];
        
        if (i % 2 == 1) {
            rect.origin.x += (WIDTH + INNER) * 3;
        }else{
            rect.origin.y += HEIGHT / 1.5 + INNER;
            rect.origin.x = OX + INNER;
        }
    }
    
}

- (void)clean{
    _textField.text = @"";
}

- (void)numTurn:(UIButton *)sender{
    NSLog(@"%s",__func__);
    NSString *str = _textField.text;
    
    if (sender.tag == 26) {       // 16 -> 10
        _textField.text = [self turn16to10:str];
    }else if (sender.tag == 21) { //  2 -> 10
        _textField.text = [self turn2to10:str];
    }else if (sender.tag == 22) { // 10 ->  2
        _textField.text = [self turn10to2:str];
    }else if (sender.tag == 25) { // 10 -> 16
        _textField.text = [self turn10to16:str];
    }else if (sender.tag == 23) { //  2 -> 16
        NSString *strTemp = [self turn2to10:str];
        _textField.text = [self turn10to16:strTemp];
    }else if (sender.tag == 24) { // 16 ->  2
        NSString *strTemp = [self turn16to10:str];
        NSLog(@"%@",strTemp);
        _textField.text = [self turn10to2:strTemp];
    }
}

- (NSString *) turn10to16:(NSString *)str{
    int num = [str intValue];
    NSMutableString * result = [[NSMutableString alloc]init];
    while (num > 0) {
        int a = num % 16;
        char c;
        if (a > 9) {
            c = 'A' + (a - 10);
        }else{
            c = '0' + a;
        }
        NSString * reminder = [NSString stringWithFormat:@"%c",c];
        [result insertString:reminder atIndex:0];
        num = num / 16;
    }
    return [result autorelease];
}

- (NSString *) turn10to2:(NSString *)str{
    int num = [str intValue];
    
    NSMutableString * result = [[NSMutableString alloc]init];
    while (num > 0) {
        NSString * reminder = [NSString stringWithFormat:@"%d",num % 2];
        [result insertString:reminder atIndex:0];
        num = num / 2;
    }
    return [result autorelease];
}

- (NSString *) turn2to10:(NSString *)str{
    int sum = 0;
    for (int i = 0; i < str.length; i++) {
        sum *= 2;
        char c = [str characterAtIndex:i];
        sum += c - '0';
    }
    return [NSString stringWithFormat:@"%d",sum];
}

- (NSString *) turn16to10:(NSString *)str{
    int sum = 0;
    for (int i = 0; i < str.length; i++) {
        sum *= 16;
        char c = [str characterAtIndex:i] ;
        if (c >= 'A') {
            sum += c - 'A' + 10;
        }else{
            sum += c - '0';
        }
    }
    return [NSString stringWithFormat:@"%d",sum];
}

- (void)numInput:(UIButton *)sender{
    NSLog(@"%s",__func__);
    if (!_textField.text) {
        _textField.text = @"";
    }
    _textField.text = [NSString stringWithFormat:@"%@%@",_textField.text,sender.titleLabel.text];
    
}

@end

没有做完整的测试,只是简单试了几个数都好用。欢迎bug提出。

抱歉!评论已关闭.