-
十六进制(Hex) 、 字节(Byte)、比特(bit)
十六进制(Hex):计算机中数据的一种表示方法,它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15。
官方语言以0x开始的数据表示16进制。0x01 意思是0 * 16^1 + 1 * 16^0 = 1。字节(Byte): 数据存储的基本单位。
比特(bit): 计算机语言中表示数据信息的最小单位:0或1
-
换算关系:
1字节 = 8比特,即1个字节数据在计算机中可表示的范围在00000000~11111111之间。
众所周知,在计算机语言中,一个二进制bit位要么是0,要么是1。所以,一个bit位最多能表示2种状态(2^1),即0或1;
那么2个bit位呢? 00,01,10,11 一共可以表示4种状态(2^2)。
3个bit位可以表示:001,001,010,011,100,101,110,111 一共8种状态(2^3);
以此类推,当我们有4个bit位时,最高可以表示出16种状态。
然后就引申出了16进制(Hex):逢16进1
所以,当我们想在计算机语言中表达出一个16进制数字时,得需要4个bit位。
而1个Byte字节需要8个bit位,由此可见 byte和hex的换算关系:
我们可以将一个Byte用两个Hex表示,同理,也可以将两个Hex转换为一个Byte
基于这个原理,在Java中可以进行一些换算。
单个byte和hex的转换:
/** * 十六进制字符串 转 byte */ public static byte hexToByte(String inHex) { return (byte) Integer.parseInt(inHex, 16); } /** * byte 转 十六进制 */ public static String byteToHex(byte b) { String hex = Integer.toHexString(b & 0xFF); if (hex.length() < 2) { hex = "0" + hex; } return hex; }
-
而更多的应用场景时byte数组:
/** * 十六进制 转 bytes数组 */ public static byte[] hexStringToBytes(String hexString) { if (hexString == null || hexString.equals("")) { return null; } hexString = hexString.toUpperCase().replace(" ", ""); int length = hexString.length() / 2; char[] hexChars = hexString.toCharArray(); byte[] d = new byte[length]; for (int i = 0; i < length; i++) { int pos = i * 2; d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); } return d; } /** * byte数组 转 十六进制 */ public static String bytesToHex(byte[] bytes) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < bytes.length; i++) { String hex = Integer.toHexString(bytes[i] & 0xFF); if (hex.length() < 2) { sb.append(0); } sb.append(hex); } return sb.toString(); }
-
十进制和十六进制的转换就简单多了,调用系统api就行:
/** * 十进制 转 十六进制 */ public static String encodeHEX(Integer numb) { return Integer.toHexString(numb); } /** * 十六进制 转 十进制 */ public static int hexToInt(String hex) { return Integer.parseInt(hex, 16); }
Java基础之进制转换:十六进制、byte数组、十进制
最新推荐文章于 2024-08-05 03:18:10 发布