ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

20211020-integer转进制字符串

2022-05-22 21:03:38  阅读:148  来源: 互联网

标签:进制 val 20211020 shift char int charPos integer buf


private static String toUnsignedString0(int val, int shift) {
   // assert shift > 0 && shift <=5 : "Illegal shift value";
   int mag = Integer.SIZE - Integer.numberOfLeadingZeros(val);// 32-前导0的个数,有数值的位数
   int chars = Math.max(((mag + (shift - 1)) / shift), 1);// 需要的字符数组的长度=除数+1,此处取巧,先+1,保证即使除不尽也是满足数组长度
   char[] buf = new char[chars];

   formatUnsignedInt(val, shift, buf, 0, chars);

   // Use special constructor which takes over "buf".
   return new String(buf, true);
}

 

static int formatUnsignedInt(int val, int shift, char[] buf, int offset, int len) {
   int charPos = len;
   int radix = 1 << shift;// 进制,如 1 << 3 = 8
   int mask = radix - 1;// 掩码,如8-1=7= 00000000 00000000 0000000 00000111
   do {
       buf[offset + --charPos] = Integer.digits[val & mask];// 2进制低位 排在 字符数值高位
       val >>>= shift;
  } while (val != 0 && charPos > 0);

   return charPos;
}
final static char[] digits = {
   '0' , '1' , '2' , '3' , '4' , '5' ,
   '6' , '7' , '8' , '9' , 'a' , 'b' ,
   'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
   'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
   'o' , 'p' , 'q' , 'r' , 's' , 't' ,
   'u' , 'v' , 'w' , 'x' , 'y' , 'z'
};
 

标签:进制,val,20211020,shift,char,int,charPos,integer,buf
来源: https://www.cnblogs.com/zpq5935/p/16298966.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有