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

如何在Java中将十进制值(双精度)序列化为uint32?,java,serialization,unsigned,Java,Serialization,Unsigned,到目前为止,我一直在使用以下代码将有符号值转换为无符号值,需要通过UDP将这些值作为字节数组发送到嵌入式系统 public static byte serializeShort(short a) { return ((byte) (a & 0xFF)); } public static short serializeInt(int a) { return ((short) (a & 0xFFFF)); } public static int serial

到目前为止,我一直在使用以下代码将有符号值转换为无符号值,需要通过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()将此方法的输出放入bytebuffer

知道如何将双精度类型的有符号转换为无符号吗

具体来说,我的问题是:

我有一个正在填充的UINT32值。我用java签名的LONG或java签名的double填充字节缓冲区。我对long使用了上面的“serializeLong()”,效果很好,但double不行

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

与使用Double不同,您应该使用float并将其放入uint32空间使用:buffer.putin((float.floatorawintbits(Math.abs((float)value))

你试过什么,什么不起作用?我想您已经尝试过明显的方法,但这是不对的,那么问题是什么呢?顺便说一句,
((byte)(a&0xFF))
(byte)a
相同,为什么要序列化到一半大小?你不能那样做。此外,你需要做的就是强制转换,因为Java会做你想做的。所有这些都是从UINT8、UINT16、UINT32到Java对象的来回转换,所以当我写回它们时,我需要将该值转换回unsigned,并将其减少,使其符合可用的字节范围。您可能正在查找
Double.Double-tolongbits(Double)
。四天前提出该建议时,您完全忽略了该建议。