回 帖 发 新 帖 刷新版面

主题:[原创]InetAddress类的getByAddress()方法

getByAddress(byte[])方法.此方法是用一存放在byte数组里的IP地址来获取一InetAddress对象.
但在实际中发现这是一件颇为麻烦的事.byte范围是-128到127,而IP地址每个段范围是0到255,显然超过了byte的范围了,这就需要转换,把大于127(即大于0111 1111)的数转换为二进制,然而把这个二进制数当作某一负十进制数的补码,对这个补码再求补得到这个负数的十进制原码,将其存入byte[]数组中.比如,要得到以IP 219.133.60.243为参数的InetAddress对象,那么就要求参数为byte{-37,-123,60,-13}.

这还不算,假如需要以用户数入的IP为参数构造一个InetAddress对象,我们就会发现,用户输入的数据都是String型的,要先把这个String用split()方法分解为四个String,然后对每个String用Byte.parseByte()方法转换为byte,但下一步怎么办呢?就是补码原码的转换问题该怎么做呢????

回复列表 (共2个回复)

沙发

哦,我发现了,其实大于127的byte和其对应的那个负数的绝对值的和为256.我知道该怎么做了.

板凳

其实不管是219还是-37只是数值表现外在形式。其实它们的最低字节在内存中的存储情况是一样的。
    你只需要把219中的最低字节取出来赋给byte变量就行了。
    并一定要进行强制类型转换。


    如果你爱思考,就先别往下看答案。建议你先想想看并亲自动手写代码调试!相信你一定能找到答案。

 





    String str = "192.168.0.111";
    String [] ipStr = str.split("\\.");//以"."拆分字符串
    byte [] ipBuf = new byte[4];
    for(int i = 0 ; i < 4; i++)
    {
        ipBuf[i] = (byte)(Integer.parseInt(ipStr[i])&0xFF);//调整整数大小。
                                                           //byte的数值范围为-128~127
    }     

    在此感谢楼主的点拔

我来回复

您尚未登录,请登录后再回复。点此登录或注册