如何在Java中将十进制值(双精度)序列化为uint32?
到目前为止,我一直在使用以下代码将有符号值转换为无符号值,需要通过UDP将这些值作为字节数组发送到嵌入式系统如何在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
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)
。四天前提出该建议时,您完全忽略了该建议。