Rog*_*Gay 2 java network-protocols type-conversion primitive-types java-7
如何在Java中生成16位无符号整数和64位无符号整数?这个问题与实施标准有关.我无法改变规格.
规范的其他可能相关的部分.这个问题与:
应用程序上下文:数字(以任一形式)表示要发送的数据的长度.长度可以大或小.我第一次发现要发送的消息长度很长.
所以我开始: 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);
}
Run Code Online (Sandbox Code Playgroud)
和
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);
}
Run Code Online (Sandbox Code Playgroud)
请注意,这些适用于有符号和无符号整数.(或者更准确地说,对于Java上下文,如果参数表示有符号或无符号整数,它们就可以工作.)
| 归档时间: |
|
| 查看次数: |
11210 次 |
| 最近记录: |