gpt4 book ai didi

java - 将 java.net.InetAddress 转换为长

转载 作者:搜寻专家 更新时间:2023-11-01 01:18:07 24 4
gpt4 key购买 nike

我想转换一个 java.net.InetAddress 并与签名/未签名问题作斗争。好痛苦。

我读了convert from short to byte and viceversa in JavaWhy byte b = (byte) 0xFF is equals to integer -1?

结果是:

     final byte [] pumpeIPAddressRaw =
java.net.InetAddress.getByName (pumpeIPAddressName).getAddress ();

final long pumpeIPAddress =
((pumpeIPAddressRaw [0] & 0xFF) << (3*8)) +
((pumpeIPAddressRaw [1] & 0xFF) << (2*8)) +
((pumpeIPAddressRaw [2] & 0xFF) << (1*8)) +
(pumpeIPAddressRaw [3] & 0xFF);

android.util.Log.i (
Application.TAG, "LOG00120: Setzte Pumpen Addresse : " +
pumpeIPAddress + ":" + pumpeIPPort);

猜猜日志仍然显示什么:

04-10 13:12:07.398 I/ch.XXXX.remote.Application(24452): LOG00120: Setzte Pumpen Addresse : -1063035647:27015

有人知道我做错了什么吗?

最佳答案

& 0xff 在从 byteint 的转换过程中阻止符号扩展,但您的表达式还包含从 int 的转换> 到 long 并且您还需要在此转换期间阻止符号扩展:

final long pumpeIPAddress =
(((pumpeIPAddressRaw [0] & 0xFF) << (3*8)) +
((pumpeIPAddressRaw [1] & 0xFF) << (2*8)) +
((pumpeIPAddressRaw [2] & 0xFF) << (1*8)) +
(pumpeIPAddressRaw [3] & 0xFF)) & 0xffffffffl;

或者,您可以一步将byte转换为long,方法是将& 0xff操作的第二个操作数标记为long 使用 l 后缀:

final long pumpeIPAddress =
((pumpeIPAddressRaw [0] & 0xFFl) << (3*8)) +
((pumpeIPAddressRaw [1] & 0xFFl) << (2*8)) +
((pumpeIPAddressRaw [2] & 0xFFl) << (1*8)) +
(pumpeIPAddressRaw [3] & 0xFFl);

关于java - 将 java.net.InetAddress 转换为长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10087800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com