socket UDP连接问题求帮助,急急急!!! 问题如下,.net客户端发送的数据包是用bitConvert编译后发送过来的 。我用java抓取包以后, 不知道 怎么转码了,求大家帮帮我 ,很急 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个要看你在.net中是将什么转换成byte[]了一般的double、long等都是按逆序处理而已例如在.net中byte[] b = BitConverter.GetBytes(1.23);会得到174,71,225,122,20,174,243,63这8个字节在Java中处理byte[] b = { (byte) 174,71,(byte) 225,122,20,(byte) 174,(byte) 243,63 };long l = 0;for(int i = b.length - 1; i >= 0; i--) l = (l << 8) | (b[i] & 0xFF);System.out.println(Double.longBitsToDouble(l)); 你这个值能转double我里面还有其它类型的了, 怎么办啊, 还有String类型的 。。 BitConverter.toString();主要是解析这句话。,。 不明白你的用法,你说UDP传输那应该是byte[]的传输啊,怎么会用ToString?如果是ToString,对应Java也非常简单啊string str = BitConverter.ToString(...);在Java中解释就是String str = "5C-62-63";byte[] b = new byte[(str.length() + 1) / 3];for(int i = 0; i < b.length; i++) { char h = str.charAt(i * 3); char l = str.charAt(i * 3 + 1); int v = (h >= 'A' && h <= 'F') ? (h - 'A' + 10) : (h - '0'); v = (v << 4) | ((l >= 'A' && l <= 'F') ? (l - 'A' + 10) : (l - '0')); b[i] = (byte) v;} 我说错话了 ,那个 人说用.net 就一句代码 , System.Text.Encoding.UTF8.getString(array)你帮我想想,怎么样把那个字节类型的 转换为String类型的。 直接用toString()转不可以吗?StringBuffer sMessage = new StringBuffer();sbMessage.append(new String(getByteMessage,"UTF-8"));//getByteMessage是Socket收到的字节类型数据String s = sbMessage.toString();尝试一下 Th @ 8B?叱?@ ? 7乱码就是这样 。。他是用.net 设置成byte类型的 包, 我 解不出来了 不应该有问题的,应该是你代码有问题.net中byte[] b = System.Text.Encoding.UTF8.GetBytes("The测试");生成字节数组{84,104,101,230,181,139,232,175,149}在Java中byte[] b = {84,104,101,(byte) 230,(byte) 181,(byte) 139,(byte) 232,(byte) 175,(byte) 149};System.out.println(new String(b, "UTF-8"));也是打印The测试的可能是你没有注意DatagramPacket packetpacket.getOffset()/getLength()属性,你拿出了多余的字节了所以应该是new String(packet.getData(), packet.getOffset(), packet.getLength(), "UTF-8"); 按照你说的方法还是乱码。。他说解码的方法是BitConverter.ToString(buffer, 0, readBytes).Replace("-", ",");JAVA,我真的不知道怎么解了。 到底方法是什么啊。你怎么老变?如果是BitConverter.ToString(buffer, 0, readBytes).Replace("-", ",");就是String str = "5C6263";byte[] b = new byte[str.length() / 2];for(int i = 0; i < b.length; i++) { char h = str.charAt(i * 2); char l = str.charAt(i * 2 + 1); int v = (h >= 'A' && h <= 'F') ? (h - 'A' + 10) : (h - '0'); v = (v << 4) | ((l >= 'A' && l <= 'F') ? (l - 'A' + 10) : (l - '0')); b[i] = (byte) v;}System.out.println(Arrays.toString(b));如果再需要将b转换成字符串,就new String(b,"UTF-8"); 设备供应商完全忽悠我 , 我们在 开发GPS接收程序。 这就是协议, 给你看看使用UDP传输协议 传输数据格式如下:1.GPS基础数据 10代表GPS数据,终端ID号11位,经度,纬度,日期时间,方向角,速度 10,16400015665,421725569,112269221,2010-6-2 11:05:05,123,0 终端ID号,11位,唯一标识终端经纬度为int型,转double: double dx=(double)421725569 / 1024 / 3600;double dy=(double)112269221 / 1024 / 3600;GPS方向角和速度都为int型如:UDP监听接收到byte[] arraystring RecieveStr=System.Text.Encoding.UTF8.GetString(array);则RecieveStr的值的格式同“16400015665,421725569,112269221,2010-6-2 11:05:05,123,0”2.报警数据 11代表GPS数据,终端ID号11位,经度,纬度,日期时间,方向角,速度 11,16400015665,421725569,112269221,2010-6-2 11:05:05,123,0,紧急报警 基础信息同上,后面多了报警信息描述“紧急报警” 没有,关键是数据解析不出来了 , byte类型的数组解析出来还是乱的 用java .net都一样。 54,68,00,00,40,00,01,38,42,00,39,17,18,0b,04,0e,05,27,29,03,df,ad,e0,0c,ea,12,d0,00,00,00,00,00,00,00,00,00,07,06,9f,0d,0apublic string ChangeNum(string oldNum) { return Convert.ToInt32(oldNum, 16).ToString().PadLeft(2,'0'); } java中怎么转啊, .net是这样toInt32 这些都是非常简单的转换而已,你还是找本书看看吧String str = Integer.toString(Integer.parseInt(oldNum, 16));return str.length() < 2 ? ("0" + str) : str; 请帮忙看看 request.getparameter()取值问题 请教一个简单的加密方法! 关于jar包的问题?? 高分请教简单的时间问题 部署JAVA WEB START时发生错误:NoClassDefFoundError 为什么我老是网页有错误? 按一下BUTTON.如何让checkbox全部选中呀? 怎么才能在页面加载时不触发onpropertychange事件 js必须输入身份证的 Action添加session 在HttpServlet 中获取不到session 中的值 servlet 中 session 存入验证码 但页面 取出来的总是 页面首次加载时的上一个 验证码
例如在.net中byte[] b = BitConverter.GetBytes(1.23);
会得到
174,71,225,122,20,174,243,63
这8个字节
在Java中处理byte[] b = {
(byte) 174,71,(byte) 225,122,20,(byte) 174,(byte) 243,63
};
long l = 0;
for(int i = b.length - 1; i >= 0; i--)
l = (l << 8) | (b[i] & 0xFF);
System.out.println(Double.longBitsToDouble(l));
在Java中解释就是
String str = "5C-62-63";
byte[] b = new byte[(str.length() + 1) / 3];
for(int i = 0; i < b.length; i++) {
char h = str.charAt(i * 3);
char l = str.charAt(i * 3 + 1);
int v = (h >= 'A' && h <= 'F') ? (h - 'A' + 10) : (h - '0');
v = (v << 4) | ((l >= 'A' && l <= 'F') ? (l - 'A' + 10) : (l - '0'));
b[i] = (byte) v;
}
StringBuffer sMessage = new StringBuffer();
sbMessage.append(new String(getByteMessage,"UTF-8"));//getByteMessage是Socket收到的字节类型数据
String s = sbMessage.toString();尝试一下
叱?
@ ? 7
乱码就是这样 。。
他是用.net 设置成byte类型的 包, 我 解不出来了
.net中
byte[] b = System.Text.Encoding.UTF8.GetBytes("The测试");
生成字节数组
{84,104,101,230,181,139,232,175,149}
在Java中byte[] b = {84,104,101,(byte) 230,(byte) 181,(byte) 139,(byte) 232,(byte) 175,(byte) 149};
System.out.println(new String(b, "UTF-8"));也是打印The测试的可能是你没有注意
DatagramPacket packetpacket.getOffset()/getLength()属性,你拿出了多余的字节了
所以应该是new String(packet.getData(), packet.getOffset(), packet.getLength(), "UTF-8");
他说解码的方法是BitConverter.ToString(buffer, 0, readBytes).Replace("-", ",");
JAVA,我真的不知道怎么解了。
BitConverter.ToString(buffer, 0, readBytes).Replace("-", ",");就是String str = "5C6263";
byte[] b = new byte[str.length() / 2];
for(int i = 0; i < b.length; i++) {
char h = str.charAt(i * 2);
char l = str.charAt(i * 2 + 1);
int v = (h >= 'A' && h <= 'F') ? (h - 'A' + 10) : (h - '0');
v = (v << 4) | ((l >= 'A' && l <= 'F') ? (l - 'A' + 10) : (l - '0'));
b[i] = (byte) v;
}
System.out.println(Arrays.toString(b));
如果再需要将b转换成字符串,就new String(b,"UTF-8");
传输数据格式如下:
1.GPS基础数据
10代表GPS数据,终端ID号11位,经度,纬度,日期时间,方向角,速度
10,16400015665,421725569,112269221,2010-6-2 11:05:05,123,0 终端ID号,11位,唯一标识终端
经纬度为int型,转double: double dx=(double)421725569 / 1024 / 3600;double dy=(double)112269221 / 1024 / 3600;
GPS方向角和速度都为int型如:UDP监听接收到byte[] arraystring RecieveStr=System.Text.Encoding.UTF8.GetString(array);
则RecieveStr的值的格式同“16400015665,421725569,112269221,2010-6-2 11:05:05,123,0”2.报警数据
11代表GPS数据,终端ID号11位,经度,纬度,日期时间,方向角,速度
11,16400015665,421725569,112269221,2010-6-2 11:05:05,123,0,紧急报警
基础信息同上,后面多了报警信息描述“紧急报警”
用java .net都一样。
public string ChangeNum(string oldNum)
{
return Convert.ToInt32(oldNum, 16).ToString().PadLeft(2,'0');
}
String str = Integer.toString(Integer.parseInt(oldNum, 16));
return str.length() < 2 ? ("0" + str) : str;