如何在Java中生成16位无符号整数和64位无符号整数?这个问题与实施标准有关。我无法改变规格。
规范的其他可能相关的部分。这个问题与:
有关应用程序上下文:数字(以任一形式)表示要发送的数据的长度。长度可以大或小。我第一次发现要发送的消息长度很长。
所以我开始:long length = getLength();
然后我需要将长变量“length”转换为上述两个中的任何一个,具体取决于它的大小。最后,我很确定在发送长度时我需要.getBytes()
。收件人将如上所述进行解释。
答案 0 :(得分:6)
如果最高有效位必须为零,那么无论是有符号还是无符号,数字都是相同的(假设是二进制补码表示)。因此,例如,具有MSB零的16位整数表示从0
到32767
的数字。
假设您正在写OutputStream
,并且您对“网络顺序”的定义首先是最重要的字节,那么您需要执行以下操作:
public void writeShort(OutputStream os, short s) throws IOException {
os.write((byte) (s >> 8));
os.write((byte) s);
}
和
public void writeLong(OutputStream os, long l) throws IOException {
os.write((byte) (l >> 56));
os.write((byte) (l >> 48));
os.write((byte) (l >> 40));
os.write((byte) (l >> 32));
os.write((byte) (l >> 24));
os.write((byte) (l >> 16));
os.write((byte) (l >> 8));
os.write((byte) l);
}
请注意,这些适用于有符号和无符号整数。 (或者更准确地说,对于Java上下文,如果参数表示有符号或无符号整数,它们就可以工作。)
答案 1 :(得分:1)
Java没有无符号数据类型(请参阅此处:http://darksleep.com/player/JavaAndUnsignedTypes.html)
int有32bit,long有64bit,short有16bit
将所有内容存储得如此之长是如此糟糕?