用jpcap实现网络抓包,现在包也抓到了,放在了一个byte数组里,我现在想看看这个包里是什么,但是转化完了输出是乱码,代码如下:
byte[] b = udpPac.data;
for(int i=0;i<b.length;i++){
System.out.print((char)b[i]);
}百度说是因为要转化的byte数组里有超出ascii范围的值,我看了下,确实有,那要怎么才能转成功呢?
byte[] b = udpPac.data;
for(int i=0;i<b.length;i++){
System.out.print((char)b[i]);
}百度说是因为要转化的byte数组里有超出ascii范围的值,我看了下,确实有,那要怎么才能转成功呢?
比如:
byte[] b = udpPac.data;
String s = new String(b);
System.out.println(s);
如果在文件或是网络中读到的是8位的无符号数时,可以用以下方法转换成int型
byte b = ...;
int i = b > 0 ? b : 256+b;
String str = new String(b);
char[] chars = str.toCharArray();
for(int i =0 ; i < chars.length; i++){
System.out.println(chars[i]);
}
可以使用String(byte[] bytes, String charsetName) 这个构造方法替换,不要盲目的copy,学会自己思考。
已经看到了大部分实现了转码。但是在每个包的开头,都有极少的一段乱码,怀疑是包的头部
StringBuffer sbs=new StringBuffer();
for(int i=0;i<b.length;i++)
{
if (Integer.toHexString(b[i] & 0xFF).length() == 1)
{
sbs.append("0");
}
sbs.append(Integer.toHexString(b[i] & 0xFF));
}
System.out.println(sbs.toString());这样就转换成了一个16禁止的字符串,然后就可以用来分析了。
这里抓的数据都不明确啊如果是像图片、视频之类的字节流文件,那就肯定是不行的;
如果是文本文件,直接的用String也是不行的;java.io中的OutputStream及其子类来测试
7楼说的对,要用new string(byte[] data,String encoding)指定字符集才行。
Packet data (excluding the header)