将字符串Mac地址转换为十六进制

时间:2012-09-21 09:35:19

标签: java string hex parseint

我正在尝试将字符串macaddress转换为十六进制值。我得到了一个C#代码,它做了同样的事情但是当我使用java代码时,它给了我负值。如在C#代码中返回有符号整数但我如何在Java中执行相同的操作

以下是我的代码的一部分

Integer hex = Integer.parseInt(MacAddress.subString(0,2), 16 );
MacAddress[0] = hex.byteValue();

我在c#代码上获得了类似148的东西,java返回-148我该如何排序呢谢谢

更新

我刚刚意识到我的c#代码返回值为214的“D6”是macaddress的一部分而java代码返回-42这很奇怪

5 个答案:

答案 0 :(得分:4)

String MacAddress="D6";
Integer hex = Integer.parseInt(MacAddress.substring(0,2), 16 );
byte byteArray=(byte) hex.intValue();
System.out.println(hex+"|"+hex.byteValue()+"|"+byteArray[0]+"|"+(int)(byteArray[0]&(0xff)));        

byteValue()将以带符号格式为您提供字节。您可以将它存储在字节数组中而不用担心,只需在使用之前将其转换为无符号值。

另见 unsigned byte from signed byte

如果您不希望从签名转换为未签名,请将您的MacAddress设为char []。 默认情况下,char被视为无符号。

答案 1 :(得分:1)

由于字节是用Java签名的,所以你应该改为hex.intValue()(或者只依靠自动拆箱)。

答案 2 :(得分:1)

您可以直接访问“hex”变量

System.out.println(hex);

这是因为Java会自动将Integer对象解包为原始int。这在许多情况下都很有用,特别是与数据结构有关。

答案 3 :(得分:0)

这是一个代表问题。 “正确”数据在内部存储在计算机中。默认行为是Java显示一个字节,表示为-128到127范围内的带符号小数。由于您使用的是存储在计算机中的二进制数据,因此应打印出该值的十六进制或二进制表示。这有助于避免这里造成的混乱。

答案 4 :(得分:0)

ip = InetAddress.getLocalHost();         System.out.println("当前IP地址:" + ip.getHostAddress());

    NetworkInterface network = NetworkInterface.getByInetAddress(ip);

    byte[] mac = network.getHardwareAddress();

StringBuilder sb = new StringBuilder();
        for (int i = 0; i < mac.length; i++) {
            sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));        
        }
        System.out.println(sb.toString());

从这里复制:http://www.mkyong.com/java/how-to-get-mac-address-in-java/comment-page-1/#comment-139182