遇到一个Java Socket二进制数据包解析的问题,希望大家能不吝赐教。情况是我们需要解析客户端通过socket发来的二进制数据包。数据包有固定的格式,需要按固定字节长度去取字段。
现在遇到的问题是不知道如何将接收到的数据的byte[]转换成int、double、string或是date等类型。
不知道大家有没有相关的例子或是文档可以参考?
现在遇到的问题是不知道如何将接收到的数据的byte[]转换成int、double、string或是date等类型。
不知道大家有没有相关的例子或是文档可以参考?
解决方案 »
- 关于服务器上保存用户名和密码问题?
- 如何输出两个true???
- socket 怎样向服务器端发送长String
- 图片显示不出来啊,大家帮我看看,谢谢~~~我是新手
- ResultSet.getString()无法读取值为0000-00-00 00:00:00的Mysql datetime型数据
- 如何建立Java的应用程序?
- 为什么JTextArea和JTextPane控件在appplet中不能连贴来自外部的复制?
- 请教:Applet引用了Swing,为何在IE中没法运行啊?
- ¥我做的APPLET中按钮的TOOLSTIPTEXT属性已经设置好,但鼠标移到按钮上时,没有出现提示,请教各位高手!!!(SWING做的按钮)¥
- 我装了Jbuilder4后,我的JWSDK不能启动了。
- 为何用了那么多年Java,仍然有很多Java语言相关细节不清楚呢?
- list多线程修改同步问题
80分算法题
public static String byte2String(byte buf[], int offset)
{
int pos = offset;
for(; offset < buf.length; offset++)
if(buf[offset] == 0)
break; if(offset > pos)
offset--;
else
if(offset == pos)
return "";
int len = (offset - pos) + 1;
byte bb[] = new byte[len];
System.arraycopy(buf, pos, bb, 0, len);
String str = new String(bb);
return str;
}
//byteToLong
public static long byte2long(byte b[])
{
return (long)b[7] & 255L | ((long)b[6] & 255L) << 8 | ((long)b[5] & 255L) << 16 | ((long)b[4] & 255L) << 24 | ((long)b[3] & 255L) << 32 | ((long)b[2] & 255L) << 40 | ((long)b[1] & 255L) << 48 | (long)b[0] << 56;
}
//byteToInt
public static int byte2int(byte b[], int offset)
{
return b[offset + 3] & 0xff | (b[offset + 2] & 0xff) << 8 | (b[offset + 1] & 0xff) << 16 | (b[offset] & 0xff) << 24;
}
* 将高字节数组转换为int
*
* @param b
* byte[]
* @return int
*/
public static int hBytesToInt(byte[] b) {
int s = 0;
for (int i = 0; i < 3; i++) {
if (b[i] >= 0) {
s = s + b[i];
} else {
s = s + 256 + b[i];
}
s = s * 256;
}
if (b[3] >= 0) {
s = s + b[3];
} else {
s = s + 256 + b[3];
}
return s;
} /**
* 将低字节数组转换为int
*
* @param b
* byte[]
* @return int
*/
public static int lBytesToInt(byte[] b) {
int s = 0;
for (int i = 0; i < 3; i++) {
if (b[3 - i] >= 0) {
s = s + b[3 - i];
} else {
s = s + 256 + b[3 - i];
}
s = s * 256;
}
if (b[0] >= 0) {
s = s + b[0];
} else {
s = s + 256 + b[0];
}
return s;
}
方法很多网上一搜一大堆,传入byte流返回相应的数字等等,字符串需要知道编码格式。