【发布时间】:2017-02-03 20:10:22
【问题描述】:
到目前为止,我一直在使用以下代码将有符号值转换为无符号值,我需要将这些值作为字节数组通过 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));
}
long 的问题是一些值可以是实值。我通过 put()、putInt() 或 putShort() 将这个方法的输出放入字节缓冲区。
知道如何将双精度类型的有符号转换为无符号吗?
这是我的问题:
我有一个正在填充的 UINT32 值。我正在用 java 签名的 LONG 或 java 签名的 double 填充我的字节缓冲区。我用上面的'serializeLong()' 来做long,它工作得很好,但是双打却不行。
ByteBuffer buffer = ByteBuffer.allocate(SIZE);
if (value instanceof Long)
{
buffer.putInt(Util.serializeLong((Long) value));
} else
{
buffer.putInt(Util.serializeLong(Double.doubleToLongBits((Double) value)));
}
【问题讨论】:
-
您尝试了哪些方法,哪些方法不起作用?我假设您已经尝试了显而易见的方法,但这是不对的,那么问题是什么?
-
顺便说一句
((byte) (a & 0xFF))与(byte) a相同 -
你为什么要序列化到一半大小?你不能那样做。此外,你所要做的就是强制转换,因为 Java 的 narrowing primitive conversion 会做你想做的事。
-
所有这些都是从 UINT8、UINT16、UINT32 到 java 对象来回转换,所以当我写回它们时,我需要将值转换回无符号并减少它所以它适合可用的字节范围。
-
您可能正在寻找
Double.doubleToLongBits(double)。
标签: java serialization unsigned