如何在scala中读取一个在python中打包的长数字

2024-09-30 04:27:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我的scala程序(通过tcp)接收一个用python打包的长数字:

Python以这种方式发送长值:

connection.send(struct.pack("!L", 2052))

Scala通过读取流接收:

...
val dataInputStream = new BufferedReader(new InputStreamReader(inputStream, "ISO-8859-1"))

val buf = new Array[Char](4)
dataInputStream.read(buf,0,4)
val realLongNum = bufArrayToLongNumber(buf)

我的buf数组包含一个数字,我可以根据这个数字自己计算所需的长数:

def bufArrayToLongNumber(buf:Array[Char]):Long =  
  (buf(0)*256*256*256 + buf(1)*256*256 + buf(2)*256 + buf(3))

我希望找到一个现有的函数来做这个计算

有吗?你知道吗


Tags: 程序sendnew方式数字valconnectionarray
2条回答

这可能有用。你知道吗

val realLongNum = buf.foldLeft(0L){case (a,b) => (a<<4) + b.toLong}

BigInt实际上有一个采用Array[Byte]的构造函数(因此必须从Array[Char]进行转换):

val bi = BigInt(buf.map(_.toByte))

这也可以处理你的号码不适合长的情况。您也可以通过调用bi.longValue来获得Long。你知道吗

如果你确定你的数字总是适合Long,我不确定这是不是比你的更好的解决方案。你知道吗

相关问题 更多 >

    热门问题