Java 为什么我从数据包中得到负的目的地地址

Java 为什么我从数据包中得到负的目的地地址,java,tcp,ip,packet,Java,Tcp,Ip,Packet,我试图解析数据包以获得目标IP地址并将其转换为主机名。问题是我得到了一个负的目标地址,如下所示: IP版本:4 收割台长度:20 全长:60 议定书:6 来源IP:10.0.2.0 目的地IP:-83.-4.102.16 未知宿主 IP版本:4 收割台长度:20 全长:92 议定书:6 来源IP:-64.-88.1.5 目的地IP:54-9-67-15 我做错什么了吗?我该怎么做才对呢 packet.get()返回byte。在javabyte中,如果有符号,则需要一个无符号值。使用b

我试图解析数据包以获得目标IP地址并将其转换为主机名。问题是我得到了一个负的目标地址,如下所示:

  • IP版本:4
  • 收割台长度:20
  • 全长:60
  • 议定书:6
  • 来源IP:10.0.2.0
  • 目的地IP:-83.-4.102.16
  • 未知宿主

  • IP版本:4
  • 收割台长度:20
  • 全长:92
  • 议定书:6
  • 来源IP:-64.-88.1.5
  • 目的地IP:54-9-67-15

我做错什么了吗?我该怎么做才对呢

packet.get()
返回
byte
。在java
byte
中,如果有符号,则需要一个无符号值。使用
byte
可以得到任何字节的负值,该值应大于
127

例子
要将
字节
“转换”为正确的无符号值,必须使用使用超过1个字节的基元整数类型,并执行一些小技巧以获得无符号值:

byte b = // your value goes here
int printInt = ((int) b) & 0xFF;
// printInt contains the unsigned value of the byte.

packet.get()
的返回类型是什么?它用于获取bytebuffer当前位置的字节,并将其位置增加1。链接->谢谢!这很有帮助。真的很感激那个人!:)还有,我需要把这条线索变成“解决”还是什么?@CikLinas:要把一个问题标记为已解决,你通常会接受一个答案。()
byte b = 0xFF; // 255
System.out.println(b == -1); // prints true
byte b = // your value goes here
int printInt = ((int) b) & 0xFF;
// printInt contains the unsigned value of the byte.