我正在尝试将字符串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,这很奇怪
最佳答案
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被视为未签名。