如何将十进制值(双精度)序列化为 Java 中的 uint32?

How to serialize a decimal value (double) to a uint32 in Java?

到目前为止,我一直在使用以下代码将有符号值转换为无符号值,我需要将这些值作为字节数组通过 UDP 发送到嵌入式系统。

   public static byte serializeShort(short a)
{
    return ((byte) (a & 0xFF));
}

public static short serializeInt(int a)
{
    return ((short) (a & 0xFFFF));
}

public static int serializeLong(long a)
{
    return ((int) (a & 0xFFFFFFFF));
}

问题很长,有些值可能是真实值。我通过 put()、putInt() 或 putShort() 将此方法的输出放入字节缓冲区。

知道如何将 double 类型的有符号转换为无符号吗?

具体来说这是我的问题:

我有一个正在填充的 UINT32 值。我正在用 java signed LONG 或 java signed double 填充我的字节缓冲区。我将上面的 'serializeLong()' 用于多头,它工作正常,但双打不行。

ByteBuffer buffer = ByteBuffer.allocate(SIZE);
if (value instanceof Long)
    {
        buffer.putInt(Util.serializeLong((Long) value));
    } else
    {
        buffer.putInt(Util.serializeLong(Double.doubleToLongBits((Double) value)));
    }

您应该使用浮点数而不是使用双精度数并将其放入 uint32 space 使用:buffer.putInt((Float.floatToRawIntBits(Math.abs( (浮动)值))));