0

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

以下是我的代码的一部分

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

我在 c# 代码上得到类似 148 的内容,而 java 返回 -148 我该如何解决这个问题 谢谢

更新

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

4

5 回答 5

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() 将为您提供带符号格式的字节。您可以将其存储在字节数组中而无需担心,只需在使用前将其转换为无符号值。

也可以从有符号字节中看到无符号字节

如果您不希望这种从有符号到无符号的转换,请将您的 MacAddress 设为 char[]。char 默认情况下被认为是无符号的。

于 2012-09-21T09:48:31.233 回答
1

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

System.out.println(hex);

这是因为 Java 自动将 Integer 对象拆箱为原始 int。这在许多情况下很有帮助,特别是对于数据结构。

于 2012-09-21T09:55:07.507 回答
1

由于字节是在 Java 中签名的,因此您可能应该这样做hex.intValue()(或仅依靠自动拆箱)。

于 2012-09-21T09:38:40.273 回答
0

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

于 2012-09-21T18:43:41.453 回答
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

于 2013-10-28T10:36:24.943 回答