可能标题有点不对,是这样的。正在学习Socket编程,现在是远程的发送一串16进制数据过来如:
FE 68 88 88 88 88 88 88 68 A0 06 33 1D AB 89 67 45 D6 16
这样的形式。我在这边接收到后应该怎么样编程使它显示出来呢?应该用什么类来进行转换?请高手指教。
FE 68 88 88 88 88 88 88 68 A0 06 33 1D AB 89 67 45 D6 16
这样的形式。我在这边接收到后应该怎么样编程使它显示出来呢?应该用什么类来进行转换?请高手指教。
解决方案 »
- 监听数据库里的数据
- jdk卸载
- Spring+hibernate3.0 +mysql5.0,hibernate的createSQLQuery时,Column '' not found错误?
- 请问大虾们,这个问题的症结是什么啊,在线等?
- java内存溢出 在线等 急用
- struts2不能传参数到FRAME中吗
- 我下载安装了sp4补丁还是不能用jdbc纯驱动连接sql2000数据库
- tomcat定义了连接池,还需要自己写管理连接池的东西吗??
- JBX中COM.ibm.db2.jdbc.app.DB2Driver无法加载
- java调用C++酒店电子门锁(门禁)接口函数调用
- java通讯问题
- 100分送上 谁能详细的解释SSH整合的步骤及运行过程和配置文件applicationContext.xml和struts-config.xml。
byte[] bys = "1324@!#$!#@QER!$#!asdf".getBytes();
long t0, t1;
t0 = System.nanoTime();
String str = printByte(bys);
t1 = System.nanoTime();
System.out.println(str);
System.out.println(t1 - t0);
} public static String printByte(byte[] bys) {
int page = (bys.length + 16 - 1) / 16;
char[] chs = init(page);
System.arraycopy(HEADER, 0, chs, 0, HEADER.length);
addLineNumber(chs, page);
addLineSeparator(chs, page);
addByte(chs, bys, page);
return new String(chs);
} private static char[] init(int page) {
char[] chs = new char[(page + 2) * LINE_CHARS];
for(int i = 0; i < chs.length; i++) {
if(i > LINE_CHARS * 2 && i % LINE_CHARS == LINE_CHARS - 20) {
chs[i] = '|';
} else {
chs[i] = ' ';
}
}
return chs;
} private static void addLineNumber(char[] chs, int page) {
for(int i = 0; i < page; i++) {
int k = (i + 2) * LINE_CHARS;
for(int j = 0; j < 7; j++) {
chs[k++] = HEX[(i >> ((6 - j) * 4)) & 0xf];
}
chs[k++] = '0';
chs[k++] = ' ';
chs[k++] = ':';
}
} private static void addLineSeparator(char[] chs, int page) {
int p = page + 2;
for(int i = 1; i <= p; i++) {
chs[i * LINE_CHARS - 1] = '\n';
}
} private static void addByte(char[] chs, byte[] bys, int page) {
for(int i = 0; i < page; i++) {
int offset = i * 16;
int c = offset + 16;
int x = (i + 2) * LINE_CHARS + 11;
int y = (i + 2) * LINE_CHARS + 63;
while(offset < c && offset < bys.length) {
chs[x++] = HEX[(bys[offset] >> 4) & 0xf];
chs[x++] = HEX[bys[offset] & 0xf];
chs[x++] = ' '; chs[y] = (char)bys[offset];
if(chs[y] < ' ') {
chs[y] = '.';
}
y++;
offset++;
}
}
} private final static char[] HEADER =
" 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | 0123456789ABCDEF\n------------------------------------------------------------+------------------".toCharArray();
}
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | 0123456789ABCDEF
------------------------------------------------------------+------------------
00000000 : 61 64 73 66 71 77 65 72 31 33 32 34 20 31 32 31 | adsfqwer1324 121
00000010 : 32 33 34 31 33 32 34 31 21 | 23413241!
* 字节工具类
*
* @author bao110908
* @since 2009-02-19
*/
public class ByteUtil { private final static char[] HEX = "0123456789abcdef".toCharArray();
public static void xor(byte[] base, byte[] data, int offset) {
for(int i = 0; i < base.length; i++) {
base[i] ^= data[offset + i];
}
} /**
* 将字节数组转成 16 进制的字符串来表示,每个字节采用两个字符表表示,每个字节间采用
* 一个空格分隔<br />
* 采用实现较为高效的 bytes2Hex 方法
* @param bys 需要转换成 16 进制的字节数组
* @return
* @deprecated
*/
public static String bytes2Hex1(byte[] bys) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < bys.length; i++) {
if(i > 0) {
sb.append(" ");
}
sb.append(HEX[bys[i] >> 4 & 0xf]);
sb.append(HEX[bys[i] & 0xf]);
}
return sb.toString();
} /**
* 将字节数组转成 16 进制的字符串来表示,每个字节采用两个字符表表示,每个字节间采用
* 一个空格分隔
* @param bys 需要转换成 16 进制的字节数组
* @return
*/
public static String bytes2HexSpace(byte[] bys) {
char[] chs = new char[bys.length * 2 + bys.length - 1];
for(int i = 0, offset = 0; i < bys.length; i++) {
if(i > 0) {
chs[offset++] = ' ';
}
chs[offset++] = HEX[bys[i] >> 4 & 0xf];
chs[offset++] = HEX[bys[i] & 0xf];
}
return new String(chs);
} /**
* 将字节数组转成 16 进制的字符串来表示,每个字节采用两个字符表表示
*
* @param bys 需要转换成 16 进制的字节数组
* @return
*/
public static String bytes2Hex(byte[] bys) {
char[] chs = new char[bys.length * 2];
for(int i = 0, offset = 0; i < bys.length; i++) {
chs[offset++] = HEX[bys[i] >> 4 & 0xf];
chs[offset++] = HEX[bys[i] & 0xf];
}
return new String(chs);
} /**
* 将字节数组转成 16 进制的字符串来表示,每个字节采用两个字符表表示,字节间没有分隔
* 符。<br />
* 采用实现较为高效的 bytes2Hex 方法
* @param bys 需要转换成 16 进制的字节数组
* @return
* @deprecated
*/
public static String bytes2Hex2(byte[] bys) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < bys.length; i++) {
sb.append(HEX[bys[i] >> 4 & 0xf]);
sb.append(HEX[bys[i] & 0xf]);
}
return sb.toString();
} public static byte[] int2BytesBE(int num) {
byte[] bys = new byte[Integer.SIZE / Byte.SIZE];
for(int i = 0, k = bys.length; i < k; i++) {
bys[i] = (byte)(num >>> ((k - 1 - i) * Byte.SIZE) & 0xff);
}
return bys;
} public static byte[] int2BytesLE(int num) {
return int2BytesBE(Integer.reverseBytes(num));
} /**
* 采用 Big-Endian 方式将 long 数据转为 byte 数组
*
* @param num
* @return 转为 Big-Endian 方式的 byte 数组
*/
public static byte[] long2BytesBE(long num) {
byte[] bys = new byte[Long.SIZE / Byte.SIZE];
for(int i = 0, k = bys.length; i < k; i++) {
bys[i] = (byte)(num >>> ((k - 1 - i) * Byte.SIZE) & 0xff);
}
return bys;
} /**
* 采用 Little-Endian 方式将 long 数据转为 byte 数组
*
* @param num
* @return 转为 Little-Endian 方式的 byte 数组
*/
public static byte[] long2BytesLE(long num) {
return long2BytesBE(Long.reverseBytes(num));
} /**
* 将 Little-Endian 的字节数组转为 int 类型的数据<br />
* Little-Endian 表示高位字节在高位索引中
* @param bys 字节数组
* @param start 需要转换的开始索引位数
* @param len 需要转换的字节数量
* @return 指定开始位置和长度以 LE 方式表示的 int 数值
*/
public static int bytes2IntLE(byte[] bys, int start, int len) {
return bytes2Int(bys, start, len, false);
} public static int bytes2IntLE(byte[] bys) {
return bytes2Int(bys, 0, bys.length, false);
} /**
* 将 Big-Endian 的字节数组转为 int 类型的数据<br />
* Big-Endian 表示高位字节在低位索引中
* @param bys 字节数组
* @param start 需要转换的开始索引位数
* @param len 需要转换的字节数量
* @return 指定开始位置和长度以 BE 方式表示的 int 数值
*/
public static int bytes2IntBE(byte[] bys, int start, int len) {
return bytes2Int(bys, start, len, true);
} public static int bytes2IntBE(byte[] bys) {
return bytes2Int(bys, 0, bys.length, true);
} /**
* 将字节数组转为 Java 中的 int 数值
* @param bys 字节数组
* @param start 需要转换的起始索引点
* @param len 需要转换的字节长度
* @param isBigEndian 是否是 BE(true -- BE 序,false -- LE 序)
* @return
*/
private static int bytes2Int(byte[] bys, int start, int len,
boolean isBigEndian) {
int n = 0;
for(int i = start, k = start + len % (Integer.SIZE / Byte.SIZE + 1); i < k; i++) {
n |= (bys[i] & 0xff) << ((isBigEndian ? (k - i - 1) : i) * Byte.SIZE);
}
return n;
} /**
* 将 Little-Endian 的字节数组转为 long 类型的数据<br />
* Little-Endian 表示高位字节在高位索引中
* @param bys 字节数组
* @param start 需要转换的开始索引位数
* @param len 需要转换的字节数量
* @return 指定开始位置和长度以 LE 方式表示的 long 数值
*/
public static long bytes2LongLE(byte[] bys, int start, int len) {
return bytes2Long(bys, start, len, false);
} public static long bytes2LongLE(byte[] bys) {
return bytes2Long(bys, 0, bys.length, false);
} /**
* 将 Big-Endian 的字节数组转为 long 类型的数据<br />
* Big-Endian 表示高位字节在低位索引中
* @param bys 字节数组
* @param start 需要转换的开始索引位数
* @param len 需要转换的字节数量
* @return 指定开始位置和长度以 BE 方式表示的 long 数值
*/
public static long bytes2LongBE(byte[] bys, int start, int len) {
return bytes2Long(bys, start, len, true);
} public static long bytes2LongBE(byte[] bys) {
return bytes2Long(bys, 0, bys.length, true);
} private static long bytes2Long(byte[] bys, int start, int len,
boolean isBigEndian) {
long n = 0L;
for(int i = start, k = start + len % (Long.SIZE / Byte.SIZE + 1); i < k; i++) {
n |= (bys[i] & 0xffL) << ((isBigEndian ? (k - i - 1) : i) * Byte.SIZE);
}
return n;
}
}