【问题标题】:Converting String Mac Address to Hex将字符串 Mac 地址转换为十六进制
【发布时间】:2012-09-13 17:20:30
【问题描述】:

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

【问题讨论】:

    标签: java string hex parseint


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
      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 默认被认为是无符号的。

      【讨论】:

      • 是的,但我需要它在一个字节数组中,这就是整个问题
      • 'hex.byteValue()' 中的值实际上是 214 的二进制值,但是当你尝试打印时,它会给你高于 128 的数字的负值。
      • 所以你可以做的就是为数组中的每个十六进制存储 hex.byteValue()。
      • 是的,但是当我在不打印的情况下进行调试时,字节数组包含 214 的负值
      • 问题是java认为你的字节有一个有符号的值,所以它会显示你的负数为214
      【解决方案3】:

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

      System.out.println(hex);
      

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-08-08
            • 2023-03-05
            • 2020-07-26
            • 1970-01-01
            • 1970-01-01
            • 2018-01-31
            • 2018-01-22
            • 1970-01-01
            相关资源
            最近更新 更多