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