问题如下,.net客户端发送的数据包是用bitConvert编译后发送过来的 。我用java抓取包以后, 不知道 怎么转码了,求大家帮帮我 ,很急

解决方案 »

  1.   

    这个要看你在.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));
      

  2.   

    你这个值能转double我里面还有其它类型的了, 怎么办啊, 还有String类型的 。。
      

  3.   

    BitConverter.toString();主要是解析这句话。,。
      

  4.   

    不明白你的用法,你说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;
    }
      

  5.   

    我说错话了 ,那个 人说用.net 就一句代码 , System.Text.Encoding.UTF8.getString(array)你帮我想想,怎么样把那个字节类型的 转换为String类型的。
      

  6.   

    直接用toString()转不可以吗?
    StringBuffer sMessage = new StringBuffer();
    sbMessage.append(new String(getByteMessage,"UTF-8"));//getByteMessage是Socket收到的字节类型数据
    String s = sbMessage.toString();尝试一下
      

  7.   

    Th  @ 8B? 
    叱 ?
    @ ?           7
    乱码就是这样 。。
    他是用.net 设置成byte类型的 包,  我 解不出来了
      

  8.   

    不应该有问题的,应该是你代码有问题
    .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");
      

  9.   

    按照你说的方法还是乱码。。
    他说解码的方法是BitConverter.ToString(buffer, 0, readBytes).Replace("-", ",");
    JAVA,我真的不知道怎么解了。
      

  10.   

    到底方法是什么啊。你怎么老变?如果是
    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");
      

  11.   

    设备供应商完全忽悠我 ,      我们在 开发GPS接收程序。
      

  12.   

    这就是协议, 给你看看使用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,紧急报警
      基础信息同上,后面多了报警信息描述“紧急报警”
      

  13.   

    没有,关键是数据解析不出来了 , byte类型的数组解析出来还是乱的 
    用java .net都一样。
      

  14.   

    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,0a
    public string ChangeNum(string oldNum)
            {
                return Convert.ToInt32(oldNum, 16).ToString().PadLeft(2,'0');
            }
      

  15.   

    java中怎么转啊, .net是这样toInt32 
      

  16.   

    这些都是非常简单的转换而已,你还是找本书看看吧
    String str = Integer.toString(Integer.parseInt(oldNum, 16));
    return str.length() < 2 ? ("0" + str) : str;