今天去一公司面试,一进门就给了张卷子,要求笔试。将10进制转换为16进制。
以前每次都用的是Java自带的函数进行转换的,比如:
- String s = "1610";
- String _hex = Integer.toHexString(Integer.parseInt(s));//转16进制
- System.out.println(s+"转16进制为:" + _hex);
公司要求手写代码,好久没写了,都忘记了,网上看了下才想起来,思路如下:
要把1610转换成16进制 为什么有的是先转换成2进制?具体方法和步骤怎么样?
我觉得最简单的方法是直接转16进制:
1610/16=100……10(A);
100 /16= 6……4;
6 /16= 0……6;
故:1610(10)=64A(16)
因此,只需要把每次的余数保留就是得到的结果,一直除到商为0
- static String dec2hex(int n)
- {
- StringBuffer buf = new StringBuffer();
- // int i=0;
- int mod;
- while(n>0)
- {
- mod = n%16; //取得每次的余数,也就是转换后的进制数
- buf.append(tohex(mod)); //判断下是否大于9,因为16禁止里面10对应的是A,11对应的是B,以此类推
- n=n/16; //取得商
- }
- //得进行反序。
- return buf.reverse().toString();
- // int j,k;
- // for(j=0,k=i-1;j<i/2;j++,k--)
- // {
- // String temp;
- // temp = buf[j];
- // buf[j] = buf[k];
- // buf[k] = temp;
- // }
- }
- static String tohex(int n)
- {
- switch (n) {
- case 10:return "A";
- case 11:return "B";
- case 12:return "C";
- case 13:return "D";
- case 14:return "E";
- case 15:return "F";
- default:
- return n+"";
- }
- }
使用StringBuffer 的好处就是直接可以倒序输出。
转载于:https://blog.51cto.com/xqsea/1161924