首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Java (16位)表示TCP端口范围

如何用Java (16位)表示TCP端口范围
EN

Stack Overflow用户
提问于 2016-01-25 17:00:40
回答 1查看 299关注 0票数 1

端口范围从0到65536,因为它存储为16位无符号整数。

在Java中,16位的仅上升到32,767.整数很好,但是API需要一个无符号整数,所以它必须适合16位。

我的第一次尝试如下:

代码语言:javascript
复制
public byte[] encode() {
    final int MESSAGE_SIZE = 10;
    Bytebuffer buffer = ByteBuffer.allocate(MESSAGE_SIZE);
    buffer.putInt(someInt);
    buffer.putShort(portValue);
    buffer.putInt(someOtherInt); 
    return buffer.array();
}

但很明显,如果我只使用一个空号,我就不能代表32,767以上的港口。

我的问题是,如何将一个可达65536的值作为短值放入缓冲区,以便接收API能够在16位内解释它?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-25 17:11:21

您只需在程序中使用普通的int来存储端口。当您想要将int作为16位值发送到线路上时,只需将其转换为空值即可。这只是丢弃了高阶16位(反正你没有使用),而低阶16位则保持不变。示例:

代码语言:javascript
复制
public byte[] encode() {
    final int MESSAGE_SIZE = 10;
    int portValue = 54321;
    Bytebuffer buffer = ByteBuffer.allocate(MESSAGE_SIZE);
    buffer.putInt(someInt);
    buffer.putShort((short) portValue);
    buffer.putInt(someOtherInt); 
    return buffer.array();
}

来自收缩本原反式

缩小符号整数到整型T的转换只会丢弃除n个最低阶位外的所有比特,其中n是用来表示T型的位数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34998080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档