将Intger转换为String类型的16进制的表示
来源:互联网 发布:cf雷神刀伤害数据 编辑:程序博客网 时间:2024/04/28 07:13
public class Test {final static char[] digitals = {'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'};/** * Convert the integer to an unsigned number. * * @param i * @param shift * @return */private static String toUnsignedString(int i, int shift) {char[] buf = new char[32];int charPos = 32;int radix = 1 << shift;int mask = radix - 1;do {buf[--charPos] = digitals[i & mask];i = i >>> shift;} while(i != 0);return new String(buf, charPos, (32 - charPos));}public static void main(String[] args) {System.out.println(Test.toUnsignedString(1024, 4));}}
Integer的toHexString实现方法,恩,写的很好,学习学习。
下面是将byte数组转换为HexString的方法。
需要注意的:buf[2*i] = digitals.values()[(b[i] & 0xff) >>> shift].getC();
要&0xff,因为如果对char、byte或者short类型的数值进行移位处理,那么在移位进行之前,它们会被转换为int类型,并且得到的结果也是一个int类型的值。
如果byte数值超过2^7,即128,转换为int时就会在前面加1。
要加(),因为>>>操作符的优先级高于&。
import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;public class Util {enum digitals {ZERO('0'), ONE('1'), TWO('2'), THREE('3'), FOUR('4'), FIVE('5'),SIX('6'), SEVEN('7'), EIGHT('8'), NINE('9'), A('A'), B('B'), C('C'), D('D'), E('E'), F('F'), G('G'), H('H'),I('I'), J('J'), K('K'), L('L'), M('M'), N('N'),O('O'), P('P'), Q('Q'), R('R'), S('S'), T('T'),U('U'), V('V'), W('W'), X('X'), Y('Y'), Z('Z');private char c;public char getC() {return c;}public void setC(char c) {this.c = c;}private digitals(char c) {this.c = c;}}/** * Convert the byte array to string * @param b * @param shift * @return */public static String byteArrayToString(byte[] b, int shift) {int len = b.length;char[] buf = new char[2 * len];int radix = 1 << shift;int mask = radix - 1;for(int i = 0; i < len; i++) {buf[2*i] = digitals.values()[(b[i] & 0xff) >>> shift].getC();buf[2*i + 1] = digitals.values()[b[i] & mask].getC();}return new String(buf);}public static void main(String[] args) throws IOException {InputStream is = new FileInputStream("d://t");byte[] b= new byte[16];is.read(b);System.out.println(Util.byteArrayToString(b, 4));}}
参考:java操作符优先级
- 将Intger转换为String类型的16进制的表示
- 将ascii表示的字符转换为String(字符串)类型
- 将一个正整数N用二进制表示并转换为一个String类型的值S
- 将一个正整数N用二进制表示并转化为一个string类型的值s
- C# 无法将类型为“System.DBNull”的对象强制转换为类型“System.String”。
- 无法将类型为“System.Int32”的对象强制转换为类型“System.String”
- 将16进制Ascii码转换为string类型的电脑按键字符
- 将String转换为其表示的路径画到屏幕上
- 关于java将String类型的时间字符串转换为Date类型的问题
- 将内置类型转换为string类型
- 将String类型转换为Int类型
- 关于Java里将String类型转换为Boolean类型时的错误
- dateTimePicker的值转换为string类型
- 关于MVC中无法将类型为“System.Int32”的对象强制转换为类型“System.String”的问题。
- “无法将类型"string"转换为"char"”?
- 将int转换为string类型
- 如何将string转换为Date类型
- 将整型数据转换为string类型
- ASP.NET MVC导入excel到数据库,下载文件
- Store Kit Guide(In App Purchase)翻译
- MFC 控件处鼠标变型
- 声音、音频采样率、采样精度等常识概念
- 硬件选型相关概念
- 将Intger转换为String类型的16进制的表示
- storm入门
- 兵马未动 粮草先行:靠谱移动转售来了
- 遇到的最难的bug
- js批量打印代码!有图片示例
- 折腾二维数组
- 一些不常为人知的Js的dom
- eclipse环境下使用runjetty配置jndi数据源开发web应用
- IPv6的链路本地(link-local)地址和站点本地(site-local)地址