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; }