how to convert hex to byte for the following program?

匿名 (未验证) 提交于 2019-12-03 08:56:10

问题:

public static String asHex (byte buf[]) {     StringBuffer strbuf = new StringBuffer(buf.length * 2);     int i;      for (i = 0; i < buf.length; i++) {         if (((int) buf[i] & 0xff) < 0x10)             strbuf.append("0");          strbuf.append(Long.toString((int) buf[i] & 0xff, 16));     }      return strbuf.toString(); }

回答1:

Here's a complete program which includes the asBytes() function which is what I assume you were looking for, the opposite to asHex():

public class Temp {     public static String asHex (byte buf[]) {         StringBuffer strbuf = new StringBuffer(buf.length * 2);         int i;         for (i = 0; i < buf.length; i++) {             if (((int) buf[i] & 0xff) < 0x10)                 strbuf.append("0");             strbuf.append(Long.toString((int) buf[i] & 0xff, 16));         }        return strbuf.toString();     }     public static byte[] asBytes (String s) {         String s2;         byte[] b = new byte[s.length() / 2];         int i;         for (i = 0; i < s.length() / 2; i++) {             s2 = s.substring(i * 2, i * 2 + 2);             b[i] = (byte)(Integer.parseInt(s2, 16) & 0xff);         }         return b;     }     static public void main(String args[]) {         byte[] b = Temp.asBytes("010203040506070809fdfeff");         String s = Temp.asHex(b);         System.out.println (s);     } }


回答2:

To get a hexadecimal string representation of a byte array, you could use String.format() with the %X format specifier:

public static String asHex(byte buf[])  {     StringBuffer strbuf = new StringBuffer(buf.length * 2);      for (byte b : buf)        strbuf.append(String.format("%02X", b));      return strbuf.toString(); }

The following method gives the inverse operation, returning a byte array representation of a hexadecimal string. It uses Byte.parseByte() and some bit shifting to get two characters in one byte:

public static byte[] asBytes(String str) {     if ((str.length() % 2) == 1) str = "0" + str; // pad leading 0 if needed     byte[] buf = new byte[str.length() / 2];     int i = 0;      for (char c : str.toCharArray())     {         byte b = Byte.parseByte(String.valueOf(c), 16);         buf[i/2] |= (b << (((i % 2) == 0) ? 4 : 0));         i++;     }      return buf; }


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!