今天去一公司面试,一进门就给了张卷子,要求笔试。将10进制转换为16进制。

以前每次都用的是Java自带的函数进行转换的,比如:

 

 
  
  1. String s = "1610"
  2. String _hex = Integer.toHexString(Integer.parseInt(s));//转16进制 
  3. 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

 

 
  
  1.     static String dec2hex(int n) 
  2.     { 
  3.         StringBuffer buf = new StringBuffer(); 
  4. //      int i=0; 
  5.         int mod; 
  6.         while(n>0
  7.         { 
  8.             mod = n%16; //取得每次的余数,也就是转换后的进制数
  9.             buf.append(tohex(mod)); //判断下是否大于9,因为16禁止里面10对应的是A,11对应的是B,以此类推
  10.             n=n/16; //取得商
  11.         } 
  12.     //得进行反序。 
  13.         return buf.reverse().toString(); 
  14. //      int j,k; 
  15. //      for(j=0,k=i-1;j<i/2;j++,k--) 
  16. //      { 
  17. //          String temp; 
  18. //          temp = buf[j]; 
  19. //          buf[j] = buf[k]; 
  20. //          buf[k] = temp; 
  21. //      } 
  22.     } 
  23.      
  24.      
  25.     static String tohex(int n) 
  26.     { 
  27.         switch (n) { 
  28.         case 10:return "A"
  29.         case 11:return "B"
  30.         case 12:return "C"
  31.         case 13:return "D"
  32.         case 14:return "E"
  33.         case 15:return "F"
  34.         default
  35.             return n+""
  36.         } 
  37.     } 

 

使用StringBuffer 的好处就是直接可以倒序输出。