日期:2014-05-20 浏览次数:21405 次
String s = "测试examples!";
byte[] b = s.getBytes();
for (int i = 0; i < b.length; i++) {
System.out.print(Integer.toHexString(b[i] & 0xFF) + " ");
}
System.out.println();
//输出 b2 e2 ca d4 65 78 61 6d 70 6c 65 73 21
------解决方案--------------------
一般就是问个思路,这种只是耗时间排版的工作自己做比较好...
代码如下:
/**
* 文字转16进制
*
* @param s
*/
public void String2Hex(String s) {
byte[] b = s.getBytes();
for (int i = 0; i < b.length; i++) {
int row = i / 16;// 行
int col = i % 16;// 列
if (col == 0)// 行头
System.out.print(getLineHead(row));
System.out.print(Integer.toHexString(b[i] & 0xFF) + " ");
if (col == 15 || i == b.length - 1)// 行尾
System.out.println(getLineTail(b, row * 16, i % 16 + 1));
}
}
/**
* 得到行头
*
* @param k
* 当前行数
* @return
*/
private String getLineHead(int k) {
String head = "000000";
head += Integer.toHexString(k) + "0h: ";
if (head.length() > 11)
return head.substring(head.length() - 9, head.length());
else
return head;
}
/**
* 得到行尾
*
* @param b
* 字节数组
* @param off
* 偏移位置
* @param len
* 长度
* @return
*/
private String getLineTail(byte[] b, int off, int len) {
StringBuffer tail = new StringBuffer();
for (int i = 0; i < 16 - len; i++)
tail.append(" ");
tail.append("; " + new String(b, off, len));
return tail.toString();
}
//String s = "这是测试examples!";
//String2Hex(s);
//输出:
//00000000h: d5 e2 ca c7 b2 e2 ca d4 65 78 61 6d 70 6c 65 73 ; 这是测试examples
//00000010h: 21 ; !
------解决方案--------------------
SORRY,得到行头的方法有点问题,应该如下:(head.length() - 9 应改为head.length() - 11)
/**
* 得到行头
*
* @param k
* 当前行数
* @return
*/
private String getLineHead(int k) {
String head = "000000";
head += Integer.toHexString(k) + "0h: ";
if (head.length() > 11)
return head.substring(head.length() - 11, head.length());
else
return head;
}
------解决方案--------------------