`

java中byte 与16进制字符相互转换

    博客分类:
  • java
阅读更多

Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L)。即byte用十六进制表示只占2位。

同理,相反的转换也是将两个16进制字符转换成一个byte,原理同上。

根据以上原理,我们就可以将byte[] 数组转换为16进制字符串了,当然也可以将16进制字符串转换为byte[]数组了。

  1.  * Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。   
  2.  * @param src byte[] data   
  3.  * @return hex string   
  4.  */      
  5. public static String bytesToHexString(byte[] src){   
  6.     StringBuilder stringBuilder = new StringBuilder("");   
  7.     if (src == null || src.length <= 0) {   
  8.         return null;   
  9.     }   
  10.     for (int i = 0; i < src.length; i++) {   
  11.         int v = src[i] & 0xFF;   
  12.         String hv = Integer.toHexString(v);   
  13.         if (hv.length() < 2) {   
  14.             stringBuilder.append(0);   
  15.         }   
  16.         stringBuilder.append(hv);   
  17.     }   
  18.     return stringBuilder.toString();   
  19. }   
  20. /**  
  21.  * Convert hex string to byte[]  
  22.  * @param hexString the hex string  
  23.  * @return byte[]  
  24.  */  
  25. public static byte[] hexStringToBytes(String hexString) {   
  26.     if (hexString == null || hexString.equals("")) {   
  27.         return null;   
  28.     }   
  29.     hexString = hexString.toUpperCase();   
  30.     int length = hexString.length() / 2;   
  31.     char[] hexChars = hexString.toCharArray();   
  32.     byte[] d = new byte[length];   
  33.     for (int i = 0; i < length; i++) {   
  34.         int pos = i * 2;   
  35.         d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));   
  36.     }   
  37.     return d;   
  38. }   
  39. /**  
  40.  * Convert char to byte  
  41.  * @param c char  
  42.  * @return byte  
  43.  */  
  44.  private byte charToByte(char c) {   
  45.     return (byte"0123456789ABCDEF".indexOf(c);   
  46. }  
     * Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串。
     * @param src byte[] data
     * @return hex string
     */   
    public static String bytesToHexString(byte[] src){
        StringBuilder stringBuilder = new StringBuilder("");
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }
    /**
     * Convert hex string to byte[]
     * @param hexString the hex string
     * @return byte[]
     */
    public static byte[] hexStringToBytes(String hexString) {
        if (hexString == null || hexString.equals("")) {
            return null;
        }
        hexString = hexString.toUpperCase();
        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;
    }
    /**
     * Convert char to byte
     * @param c char
     * @return byte
     */
     private byte charToByte(char c) {
        return (byte) "0123456789ABCDEF".indexOf(c);
    }
Java代码 复制代码
  1. //将指定byte数组以16进制的形式打印到控制台   
  2. public static void printHexString( byte[] b) {     
  3.    for (int i = 0; i < b.length; i++) {    
  4.      String hex = Integer.toHexString(b[i] & 0xFF);    
  5.      if (hex.length() == 1) {    
  6.        hex = '0' + hex;    
  7.      }    
  8.      System.out.print(hex.toUpperCase() );    
  9.    }    
  10.   
  11. }  
//将指定byte数组以16进制的形式打印到控制台
public static void printHexString( byte[] b) {  
   for (int i = 0; i < b.length; i++) { 
     String hex = Integer.toHexString(b[i] & 0xFF); 
     if (hex.length() == 1) { 
       hex = '0' + hex; 
     } 
     System.out.print(hex.toUpperCase() ); 
   } 

}

 

java中byte转换int时为何与0xff进行与运算

在剖析该问题前请看如下代码

Java代码 复制代码
  1. public static String bytes2HexString(byte[] b) {   
  2.   String ret = "";   
  3.   for (int i = 0; i < b.length; i++) {   
  4.    String hex = Integer.toHexString(b[ i ] & 0xFF);   
  5.    if (hex.length() == 1) {   
  6.     hex = '0' + hex;   
  7.    }   
  8.    ret += hex.toUpperCase();   
  9.   }   
  10.   return ret;   
  11. }  
分享到:
评论
1 楼 1122334455aabb 2012-09-11  
java int,byte、char之间的相互转化,更多内容参见:http://dalvik.co.cc/html/723065718.html

相关推荐

    java16进制与字符串的转换.pdf

    Java 16进制与字符串的转换 Java 中的 16 进制与字符串之间的转换是非常重要的一种操作,特别是在数据存储和网络传输时。本文将详细介绍 Java 中的 16 进制与字符串的相互转换函数分类。 将 byte 数组以 16 进制的...

    Java中3DES加密解密示例(封装byte数组16进制互转)

    我们使用 Java 的 Integer.toHexString 方法来将 byte 数组中的每个元素转换为 16 进制字符串,并使用 StringBuilder 来拼接这些字符串。 在 hex2Byte 方法中,我们将 16 进制字符串转换回 byte 数组。我们使用 ...

    java String 与各种进制字符之间的转换

    在Java编程语言中,String类是处理文本字符串的核心类,而与各种进制字符之间的转换是常见的编程需求。本文将详细探讨Java中如何进行String与二进制、八进制、十进制以及十六进制之间的转换。 首先,我们要了解进制...

    android byte字节数组转换十六进制字符串

    在Android开发中,有时我们需要将字节数组(byte array)转换为十六进制字符串,以便于数据存储、传输或调试。这是因为字节数组是二进制数据,而十六进制字符串则是一种人类可读的表示方式。下面我们将详细讨论如何...

    java工具类 string转10进制sacii byte数组再转16进制字符数组再转16进制byte数组 string与BCD互转

    java工具类 : string转10进制sacii byte数组、 10进制sacii byte数组转16进制字符数组、 16进制字符数组转16进制byte数组、 string与BCD互转等方法,包含多个转换方法, 足够满足日常解包组包需求

    java 字符串转16进制Ascii

    在这个方法中,我们遍历输入字符串中的每个字符,将其转换为对应的ASCII整数值,然后使用`Integer.toHexString()`方法将该整数转换为16进制字符串。最后,我们将结果拼接到一个`StringBuilder`对象中,以空格分隔...

    java实现十六进制字符unicode与中英文转换示例

    在Java编程语言中,处理Unicode编码和十六进制字符转换是一项常见的任务,特别是在处理文本数据时。本示例探讨了如何使用Java实现从Unicode十六进制字符串到中英文字符的转换,以及反过来的过程。理解Unicode和UTF...

    通过java编程得到.jpg图片16进制的数据

    3. **字节与16进制转换**:Java中的`Integer.toHexString()`方法是将一个整数转换为16进制字符串的关键。由于图片文件由字节组成,我们需要先读取这些字节,然后逐个转换成16进制。 4. **位操作**:如果需要读取....

    java socket处理硬件传过来的16进制数据的工具类

    java socket处理硬件传过来的16进制数据的工具类,包含大小端转换、byte[]数组转换为16进制的字符串、byte[]转ByteBuffer、16进制字符串转换为byte数组等

    java中String_十六进制String_byte[]之间相互转换

    ### Java中String、十六进制String与byte[]之间的相互转换 在Java开发中,字符串(String)、十六进制表示的字符串以及字节数组(byte[])之间的转换是非常常见的需求,尤其是在处理网络通信、文件读写等场景下。...

    java16进制与字符串的转换借鉴.pdf

    `uniteBytes`方法通过`Byte.decode("0x" + ...)`将ASCII表示的16进制字符转换为实际的字节值。 2. **字节数组转16进制字符串**: - `Bytes2HexString`方法用于将字节数组转换为16进制字符串。它遍历输入的字节数组...

    java中进制转换(二进制,十进制,十六进制)及字节数组与十六进制的转换

    本篇将详细阐述如何在Java中进行二进制、十进制和十六进制之间的转换,以及字节数组与十六进制字符串的相互转换。 一、进制转换 1. **二进制转十进制**:Java中可以使用`Integer.parseInt()`或`Long.parseLong()`...

    android字符串和16进制转换

    这个函数会将输入字符串中的每个字符转换为对应的16进制字符串,并连接起来。 **16进制转字符串** 反过来,将16进制字符串转换回ASCII字符串,我们需要将16进制字符串分割成单个字符,然后将它们解析为整数,最后...

    java 二进制数据与16进制字符串相互转化方法

    Java 二进制数据与 16 进制字符串相互转换方法 Java 中,二进制数据和 16 进制字符串是两种常见的数据表示形式,在实际编程过程中,我们经常需要将这两种格式相互转换。本文将详细介绍 Java 中二进制数据与 16 进制...

    Java实现的进制转换工具类完整示例

    1. 将字节数组转换为十六进制字符数组:`public static char[] encodeHex(byte[] data)` 该方法将字节数组转换为十六进制字符数组。该方法可以将字节数组转换为小写或大写的十六进制字符数组,可以根据需要选择。 ...

    java-16进制4字节转Float

    在实际应用中,你需要确保输入的16进制字符串是有效的4字节浮点数表示,并且了解与之通信的设备使用的字节序。如果你手头有名为"mytest"的压缩包文件,可能包含了一个实现上述功能的示例程序或测试用例,你可以解压...

    java二进制,字节数组,字符,十六进制,BCD编码转换

    /* java二进制,字节数组,字符,十六进制,BCD编码转换2007-06-07 00:17/** *//** * 把16进制字符串转换成字节数组 * @param hex * @return */

    Java-byte数组转换成16进制字符串

    Java-byte数组转换成16进制字符串

    JAVA二进制字节数组字符十六进制BCD编码转换.doc

    - 示例中的`hexStringToByte()`方法将十六进制字符串转换为字节数组,而`bytesToHexString()`则将字节数组转换为十六进制字符串。 2. **字节数组** - 字节数组在Java中用`byte[]`表示,它可以存储任意字节值,常...

    netty服务器解析16进制数据

    Netty 不直接提供这样的转换函数,但可以借助 Java 核心库,如 `Integer.parseInt(hexChar, 16)` 将单个16进制字符转换为整数,再用 `Byte.toUnsignedInt()` 转换为无符号字节。 4. **字节到16进制字符串的转换** ...

Global site tag (gtag.js) - Google Analytics