没人知道吗?关键是怎么在java里处理无符号的整数...

解决方案 »

  1.   

    ...俺不知道为什么要unsigned int,java里面一个int就是32位,转换为byte[4]就可以了。然后把byte[4]写到字节流发送,接受的时候逆向转换为一个int就可以。比如:
    (1) int -> byte[4]
            byte[] bs = new byte[4];
            bs[0] = (byte)(i>>24 & 0x000000FF);
            bs[1] = (byte)(i>>16 & 0x000000FF);
            bs[2] = (byte)(i>>8 & 0x000000FF);
            bs[3] = (byte)(i & 0x000000FF);    
    (2) byte[4] -> outstream
            ByteArrayOutputStream os = new ByteArrayOutputStream();
            os.write(bs);
    (3) outstream -> inputstream
            ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray());
    (4) inputstream -> byte[4]
            byte[] b = new byte[4];
            is.read(b);
    (5) byte[4] -> int
            int r = b[0]<<24 & 0xFF000000 |
                    b[1]<<16 & 0x00FF0000 |
                    b[2]<<8  & 0x0000FF00 |
                    b[3]     & 0x000000FF;
      

  2.   

    因为我这边的客户端是用java写的,但服务端是用C写的.协议里的数据类型都是用的无符号整数,因此服务端传过来的数都是无符号的,如果我直接作为有符号数取出来的话就有可能不对了呀
      

  3.   

    ...那么java这边接到之后放到long里面不就搞定了嘛
      

  4.   

    java 端接到后放在一个 long 的低32位就OK,long 是64位的。
    你回传的时候也只需要回传long值的低32位。
      

  5.   

    ByteArrayOutputStream os = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(os);
    dos.writeInt(i);
    byte[] buff = os.toByteArray();
      

  6.   

    ByteArrayInputStream bais = new ByteArrayInputStream(recvbytes);
    DataInputStream dis = new DataInputStream(bais);
    int i = dis.readInt();
      

  7.   

    to:haroyy(天平)
        我发送的消息有无符号整数和定长字符串两种类型,是不是不能用你说的方法?