【问题标题】:Java Convert Negative float to byte arrayJava将负浮点数转换为字节数组
【发布时间】:2018-07-16 20:52:27
【问题描述】:

我目前正在开发一款 2D MMORPG。 所以,现在我想处理坐标,但我有一个问题。 我需要将负浮点(坐标)转换为字节,通过套接字发送到服务器,然后再转换回坐标(浮点)。 我被困在这部分了。

发送到服务器:

out.writeByte(packettype);
            out.writeFloat(x);
            out.writeFloat(y);
            out.flush();

转换回来:

            float x,y;
            byte[] xA = new byte[4];
            byte[] yA = new byte[4];
            for(int i=1;i<5;i++){
                xA[i-1] = (byte) b[i];
            }
            for(int i=5;i<9;i++){
                yA[i-5] = (byte) b[i];
            }


            x = ByteBuffer.wrap(xA).order(ByteOrder.BIG_ENDIAN).getFloat();
            y = ByteBuffer.wrap(yA).order(ByteOrder.BIG_ENDIAN).getFloat();

如果我的坐标低于 0,我会得到如下值:

X---------Y

2,3964 3854642970624

2,3964 2857584033792

2,3964 4395458363392

提前致谢!

【问题讨论】:

  • 通常您会为此使用ByteBufferDataOutputSream
  • 输出(客户端):DataOutputStream.writeFloat() 输入(服务器端):DataInputStream.readFloat(),因为 Java 1.0 为什么这是个问题?
  • @markspace 如您所见,我尝试使用ByteBuffer,但没有帮助。而我的“out”变量是DataOutputStream
  • 您为什么不使用DataInputStream 来读取您使用DataOutputStream 编写的数据?

标签: java sockets floating-point type-conversion byte


【解决方案1】:

发送到服务器:

out.writeByte(packettype);
out.writeFloat(x);
out.writeFloat(y);
out.flush();

从客户端接收:

byte packettype = in.readByte();
float x = in,readFloat();
float y = in.readFloat();

...其中inDataInputStream

【讨论】:

    猜你喜欢
    • 2016-08-21
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    相关资源
    最近更新 更多