如何在 Java 中生成 16 位无符号整数和 64 位无符号整数?这个问题与实现标准有关。我无法更改规范。
规范的其他可能相关的部分。这个问题是关于:
- 最高有效位必须为 0。
- 必须以网络字节序表示。
应用程序上下文:数字(以任何一种形式)表示正在发送的数据的长度。长度可大可小。我首先发现要发送的消息长度很长。
所以我开始:long length = getLength();
然后我需要将长变量“length”转换为上面两个中的任何一个,具体取决于它有多大。最后,我很确定在发送长度时需要执行 .getBytes()
。收件人将按上述解释。
最佳答案
如果最高有效位必须为零,那么无论有符号还是无符号,数字都是相同的(假设是二进制补码表示)。因此,例如,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 上下文,如果参数表示 有符号或无符号整数,它们就会起作用。)
关于java - 无符号 16 位和 64 位整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7306825/