0

文字列の macaddress を 16 進数値に変換しようとしています。同じことを行う C# コードを取得しましたが、Java コードを使用すると負の値が返されます。C#コードのように符号付き整数を返しますが、Javaで同じことを行うにはどうすればよいですか

以下は私のコードの一部です

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

私はC#コードで148のようなものを取得し、Javaは-148を返しますどうすればこれを整理できますか

アップデート

そして、私のC#コードがmacaddressの一部である「D6」に214の値を返し、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は、デフォルトではunsignedと見なされます。

于 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 の範囲の符号付き 10 進数として表されるバイトを表示することです。コンピューターに格納されているバイナリ データを使用しているため、その値の 16 進数またはバイナリ表現を出力する必要があります。これは、ここで生じる混乱を避けるのに役立ちます。

于 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 に答える