python网络通信传输的数据类型_关于python下的decimal数据类型网络通信传输

实现python与java之间socket通信,其中数据带Decimal数据类型.

Decimal数据类型在网络传输中用的是可转换成string的bytes,因此

编码过程:Decimal->String->bytes->网络

解码过程:网络->bytes->String->Decimal

通信协议:类型+长度+数据

A: 从java到python传递时,需要将接收到的bytes转换成字符串:

def recvString(self):

nret = int.from_bytes(self.sock.recv(4), byteorder = 'big')

if nret>0:

rv=self.sock.recv(nret*2)

sret = str(rv,encoding="utf-16be")

return sret

else:

return ""

def recvData():

nval = self.recvString()

#判断是否带小数部分

p = re.search("(\d+)\.(\d+)", nval)

if p:

#将小数部分最后是0的字符串去掉(若都是0,则.也要去掉)

ret = Decimal(re.sub(r'\.?(0+)$', "", nval))

else:

ret = Decimal(nval) #只是整数部分.

B. 从python到java传递时,需要将Decimal转换成bytes:

def convertData(ntype,data):

.............................................

#其中Decimal序列化部分

sval = str(Decimal(data))

dataLen = len(sval)

fmt="!BI{}s".format(dataLen*2)

#fmt为数据类型+数据长度+数据.

ret = struct.pack(fmt, ntype, dataLen, sval.encode(encoding='utf_16be'))

python结合正则表达式,实现字符串的判断与替换还是比较灵活、强大。

python下的Decimal数据类型转换实现网络传递,不知道是不是有更好的办法,希望留言讨论.

阅读(814) | 评论(0) | 转发(0) |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值