我正在尝试将字符串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这很奇怪
答案 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