Han*_*xue 36 java arrays scala
在Scala中,我可以用这种方式声明一个字节数组
val ipaddr: Array[Byte] = Array(192.toByte, 168.toByte, 1.toByte, 9.toByte)
Run Code Online (Sandbox Code Playgroud)
这太冗长了.是否有更简单的方法来声明Byte数组,类似于Java
byte[] ipaddr = {192, 168, 1, 1};
Run Code Online (Sandbox Code Playgroud)
请注意,由于.
String 中的错误导致以下错误
InetAddress.getByAddress("192.168.1.1".toByte)
Run Code Online (Sandbox Code Playgroud)
Zol*_*tán 41
我相信你能做的最短的就是
val ipaddr = Array[Byte](192.toByte, 168.toByte, 1, 9)
Run Code Online (Sandbox Code Playgroud)
你要转换192
,并168
以字节,因为他们不是一个有效字节的文字,因为它们是有符号字节的范围之外([-128,127]).
请注意,Java也是如此,以下是编译错误:
byte[] ipaddr = {192, 168, 1, 1};
Run Code Online (Sandbox Code Playgroud)
您必须将192和168转换为字节:
byte[] ipaddr = {(byte)192, (byte)168, 1, 1};
Run Code Online (Sandbox Code Playgroud)
KCh*_*oux 10
为了扩展Chris Martin的答案,如果你感觉很懒,而且你不想Array(...).map(_.toByte)
一遍又一遍地打字,你总是可以编写一个可变函数:
def toBytes(xs: Int*) = xs.map(_.toByte).toArray
Run Code Online (Sandbox Code Playgroud)
现在,您可以像在Java中一样简洁地声明您的字节数组:
val bytes = toBytes(192, 168, 1, 1) // Array[Byte](-64, -88, 1, 1)
Run Code Online (Sandbox Code Playgroud)