3

データグラム socket.Iam を使用して 2 台のコンピューター間でデータ転送を行いたいのですが、次の行をこのように使用します。

host=InetAddress.getByAddress("mypc",new byte[]{192,168,1,110});

しかし、上記のステートメントを使用すると、「精度が失われる可能性があります」というエラーが表示されます

だから私はこの方法でintをバイトにキャストします:

InetAddress.getByAddress("mypc",new byte[]{(byte)192,(byte)168,(byte)1,(byte)110});

上記のステートメントは今機能しますか???

4

4 に答える 4

14

すでに文字列に含まれている場合は、次を使用してgetByName()ください。

InetAddress host = InetAddress.getByName("192.168.1.110");

バイトの使用は雑然としていて、おそらく危険です (Java で使用される符号付きバイトのため)。Stringできれば s に固執してください。

于 2009-04-16T11:41:37.673 に答える
6

byteオーバーフローしたとしても、正の整数リテラルを値にキャストしても問題はありません。

このInetAddress.getByAddress()関数は、127 を超える値が負の数に変換されるという事実に完全に対応しています。

注意する必要がある唯一のことは、後で表示する場合に符号付きバイトを整数に戻すことです。これはうまくいきます:

byte b = (byte)192;
System.out.println(b); // outputs "-64"

int i = (b & 0xff);
System.out.println(i); // outputs "192"
于 2009-04-16T12:24:57.677 に答える
2

Javaバイトは署名されているので(ばか、私は知っています)、127を超えることはできません。

より完全な (および後で:) 回答については、alnitaks の回答を参照してください。

于 2009-04-16T11:40:43.057 に答える
1

1 バイトの最大値は 127 であり、それを超えると、192 の場合は負の -64、168 の場合は -88 などにロールオーバーするため、そうではない可能性があります...

于 2009-04-16T11:39:36.103 に答える