将rawbyte值转换为Java类型
我在将原始字节值转换为java类型时遇到问题。我通过数据报socket接收字节作为字节数组。我确切地知道哪些字节意味着什么,但我不知道如何适当地转换它们(我的意思是我知道偏移量,但不知道我认为我收到的是否正确;)
例如,我想将16位无符号short转换为java int类型。我在网上找到了一些例子,其中一个是:
public int getUShort(byte[] bytes, int offset) {
int b0 = bytes[offset] & oxFF;
int b1 = bytes[offset + 1] & oxFF;
return (b1 << 8) + (b0 << 0);
另一行是相同的,但最后一行是:
return (b0 << 8) + b1;
当然,它给出了不同的结果。哪一个是正确的?你能不能给我一个有效的例子,如何做相同的,但对一个未签名的长
提前谢谢你
# 1 楼答案
您可以使用DataInputStream或ByteBuffer来读取各种类型。同样,对于大多数操作,您可以使用有符号类型作为无符号值。我编写了一个简单的类来说明如何使用有符号类型,就好像它们是无符号的Unsigned
# 2 楼答案
不久前我不得不做一些类似的工作,我发现做这类工作的最好方法是使用
ByteBuffer
及其到DoubleBuffer
、LongBuffer
的转换,等等。您可以通过调用从那里,您可以通过调用
然后您可以通过调用
这些类还支持批量get操作,因此如果您知道通过网络接收到大量相同类型的数据,您可以非常快速地进行转换
如果可能的话,另一种方法是使用某种基于Java的序列化通过网络发送数据。这允许您使用流编写器类更容易地进行转换。当然,这可能不可用,特别是当您与非Java服务器通信时,但可能值得探索
# 3 楼答案
这次真的很晚了
根据数据的长度,两者都是正确的。请参见此处:http://en.wikipedia.org/wiki/Endianness