为了账号安全,请及时绑定邮箱和手机立即绑定

怎么不能用int[]接收getAddress()?

byte[]来存IP地址不够啊,超过128变-负的了,Java就是规定只能用byte吗,怎么用int[]j接收getAddress()报错呢??

正在回答

4 回答

首先InetAddress.getLocalHost() 这个方法返回的就是byte[]数组,这个没法改。

其次ipv4是4个0-255间的整数组成的,byte是1字节8 位,正好满足(2的8次方=256),所以用byte去接是合适的。

但由于java中没有unsigned的类型,所有数都是带有正负位的,所以最高位的 1 将会被解释为符号位,另外 Java 中存储是按照补码存储,如果是地址中一个是135,转二进制 1000 0111 ,这会被java认为是补码形式,转换成原码便是 1111 0001,转换成十进制数便是 -121。

你没法使用byte直接输出地址,必须转为更高级的类型。将 byte 数组中的值与 0xFF 按位与(&),过程中 byte 会隐式类型转换为 int,当与 0xFF 按位与的时候,会将除了低 8 位的其他位全部置 0,这样一来便将符号扩展的那些高位清除掉了。

2 回复 有任何疑惑可以回复我~

明白了  Thx

0 回复 有任何疑惑可以回复我~

用byte去接还不是一样么,你要另起一个int[]去接

0 回复 有任何疑惑可以回复我~
InetAddress myInetAddess;
byte[] byteArray=new byte[myInetAddress.getAddress()]
for(int i=0;i<myInetAddress.getAddress();i++){
byte[i]=byte[i]&(0xFF);//也就是说四个中只要有一个字节最高位为1的时候就需要这么隐式转换吗?
}


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

怎么不能用int[]接收getAddress()?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信