【开发者笔记】进制转换

简介: 需求:   很简单的一个需求,就是:把1变成A,2变B,超过了Z就从A0开始,AA,AB,AC…… 原理:   这就是一个实现【Integer.toHexString(123)】方法的问题,上述中输入字符串为123456789ABCDEF就是toHexString,输入字符串是1234567就是toOctalString,   输入字符串是1就是toBinaryString。

需求:

  很简单的一个需求,就是:把1变成A,2变B,超过了Z就从A0开始,AA,AB,AC……

原理:

  这就是一个实现【Integer.toHexString(123)】方法的问题,上述中输入字符串为123456789ABCDEF就是toHexString,输入字符串是1234567就是toOctalString,

  输入字符串是1就是toBinaryString。那么记录一下原理吧

  十进制转k进制的原则是整数部分除k取余,小数部分乘k取整

  那么用A-Z来表示数其实就是另类的27进制(26个字母+数字0),由于我们面对的只是整数,那么就讲A-Z存在一个字符串中,然后对数字进行除27取余,

  在用余数去找数组中对应的字符,然后存到一个StringBuilder里面,最后返回结果的时候reverse一下就ok了。

边界条件考虑:

  0:那么直接返回0

  负数:先判断数字的符号,将符号存在一个sign变量里面,最后追加到StringBuilder中即可,然后把负数乘上-1当成正数来处理

  

编码:

package com.dyi.string;

public class KBaseNumber {
	public static void main(String[] args) {
		for (int i = -100; i < 100; i++) {
			System.out.print("" + i + "__十进制: "
					+ parseKBase(i, "123456789".split("")));
			System.out.print(",   " + "八进制: "
					+ parseKBase(i, "1234567".split("")));
			System.out.print(",   " + "16进制: "
					+ parseKBase(i, "123456789ABCDEF".split("")));
			System.out.print(",   " + "A-Z进制: " + parseKBase(i));
			System.out.println(",   " + "二进制: " + parseKBase(i, "1".split("")));
		}
	}

	public static String parseKBase(int num) {
		String[] base = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
		return parseKBase(num, base);
	}

	public static String parseKBase(int num, String[] base) {
		if (num == 0) {
			return "0";
		}

		int k = base.length;
		String sign = num >= 0 ? "" : "-";
		num = num >= 0 ? num : -num;
		StringBuilder result = new StringBuilder();

		while (num > 0) {
			int idx = num % k;
			num = num / k;
			if (idx == 0) {
				result.append("0");
			} else {
				result.append(base[idx]);
			}
		}
		result.append(sign);
		return result.reverse().toString();
	}
}

  

 

结果:

 

 

 

 

 

 

 

 

朋友问的问题,顺手记录一下~

 

黑夜给了我黑色的眼睛,我却用它寻找光明
目录
相关文章
|
29天前
|
存储 网络协议 算法
探索C/C++ 进制转换之美:从原理到应用(二)
探索C/C++ 进制转换之美:从原理到应用
35 0
|
29天前
|
算法 C++
探索C/C++ 进制转换之美:从原理到应用(三)
探索C/C++ 进制转换之美:从原理到应用
29 0
|
29天前
|
存储 算法 程序员
探索C/C++ 进制转换之美:从原理到应用(一)
探索C/C++ 进制转换之美:从原理到应用
28 0
|
3月前
|
数据处理 C语言
【C语言宝库】- 操作符|详解进制转换|计算机小白必备技能(上)
【C语言宝库】- 操作符|详解进制转换|计算机小白必备技能(上)
45 0
|
10月前
|
存储 C语言
【C语言_复习_学习第二课】什么是进制?进制之间应该如何转换
什么是进制?在我们的生活中处处充满进制,一天是24个小时、一个小时是60分钟、一分钟是60秒、一个星期一共7天........还有大家听说过半斤八两这个词语吗?也就是说买半斤东西也就是八两,一斤也就是十六两,满16进一位这就是十六进制。我今天就当一次小学老师来考考你,5+8等于多少(我没有在和大家开玩笑)你会说等于13,你的回答就是十进制也就是满十进一,而在计算机中数字都是以二进制(只有1和0)存储的也就是满二进一位,当然也有八进制(从0到7)、十六进制(从0到F)都是类似的,八进制满八进一位,十六进制满十六进一位(其中十六进制10用A来表示,11-B、12-C、13-D、14-E、15-F)
80 0
|
12月前
|
人工智能
深入浅出详解进制转换
深入浅出详解进制转换
深入浅出详解进制转换
|
Rust C++ Windows
【RUST学习日记】第13课 字符串(上)
【RUST学习日记】第13课 字符串(上)
【RUST学习日记】第13课 字符串(上)
|
存储 Rust Java
RUST 学习日记 第14课 ——字符串(下)
RUST 学习日记 第14课 ——字符串(下)
RUST 学习日记 第14课 ——字符串(下)
|
Web App开发 安全 前端开发
谈谈二进制安全学习路线
前言 之前有个年轻的朋友问我二进制安全怎么学习,有没有什么学习路线,还问我有没有什么培训机构可以推荐,今天我特地写一篇文章来解答这个问题; 笔者个人将二进制研究方向分为以下几个(可能不同的人有不同的看法): 1.windows平台 2.Linux平台 3.mac平台 3.android和ios平台 4.浏览器 5.模糊测试(Fuzzing)技术(注意:这种技术可以在上面所有平台使用,不过不同的平台使用的工具方法有差异)
482 3