gpt4 book ai didi

java - 无符号 16 位和 64 位整数

转载 作者:行者123 更新时间:2023-12-04 15:50:59 25 4
gpt4 key购买 nike

如何在 Java 中生成 16 位无符号整数和 64 位无符号整数?这个问题与实现标准有关。我无法更改规范。

规范的其他可能相关的部分。这个问题是关于:

  • 最高有效位必须为 0。
  • 必须以网络字节序表示。

应用程序上下文:数字(以任何一种形式)表示正在发送的数据的长度。长度可大可小。我首先发现要发送的消息长度很长。

所以我开始:long length = getLength();

然后我需要将长变量“length”转换为上面两个中的任何一个,具体取决于它有多大。最后,我很确定在发送长度时需要执行 .getBytes()。收件人将按上述解释。

最佳答案

如果最高有效位必须为零,那么无论有符号还是无符号,数字都是相同的(假设是二进制补码表示)。因此,例如,MSB 为零的 16 位整数表示从 032767 的数字。

假设您正在写入 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com