还是那句话,没有第一时间在网上找到想要的参考代码,就自己动手做了一个。
总感觉进制转换应该有系统方法,哪位大神若知道还请不吝赐教。
// // 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提出。