java和python的代码区别_用于Base64解码的Python和Java之间的区别

本文探讨了Python和Java在Base64解码后的字节表示差异,指出Java中字节为8位有符号类型可能导致负值。为使两者输出一致,建议Java代码使用`s[i] & 0xff`或`Byte.toUnsignedInt(s[i])`。
摘要由CSDN通过智能技术生成

这是一个python代码版本:

def decode(s):

for i in range(len(s)):

print compat_ord(s[i])

def compat_ord(c):

if type(c) is int:

return c

else:

return ord(c)

decode(base64.b64decode('NwXYSw8YI7nb2PnE8eJxVoLzuBQ81wjOXh4='.encode('ascii')))

产量

55

5

216

75

15

24

35

185

219

216

249

196

241

226

113

86

130

243

184

20

60

215

8

206

94

30

我的Java版本

byte[] s = Base64.getDecoder().decode("NwXYSw8YI7nb2PnE8eJxVoLzuBQ81wjOXh4=".getBytes("ascii"));

for(int i= 0;i

System.out.println(s[i]);

}

Ouptput

55

5

-40

75

15

24

35

-71

-37

-40

-7

-60

-15

-30

113

86

-126

-13

-72

20

60

-41

8

-50

94

30

我的问题

为什么有些值是相同的而有些则不是

解决方法:

Java中的字节是8位有符号的.所以你会得到负值.

更改

System.out.println(s[i]);

System.out.println(s[i]&0xff);

获得相同的价值观.

更新:我刚看到Java 8引入了Byte.toUnsignedInt().这可能更具可读性:

System.out.println(Byte.toUnsignedInt(s[i]));

标签:python,java

来源: https://codeday.me/bug/20190608/1197958.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值