我正在尝试将字符串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被视为未签名。

10-06 03:06