首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于Base64解码的Python和Java的区别

用于Base64解码的Python和Java的区别
EN

Stack Overflow用户
提问于 2017-01-24 15:31:35
回答 1查看 2.4K关注 0票数 4

下面是python代码版本:

代码语言:javascript
复制
 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 249 196 241 226 86 130 243 184 20 215 8 206 94 30

我的Java版本

代码语言:javascript
复制
byte[] s = Base64.getDecoder().decode("NwXYSw8YI7nb2PnE8eJxVoLzuBQ81wjOXh4=".getBytes("ascii"));
for(int i= 0;i<s.length;i++){
  System.out.println(s[i]);
}

外置

55 .5 -40 75 15 24 35 -71 37 -40 -7 -60 -30 113 86 -126 -13 -72 20 60 -41 8 -50 94 30

我的问题

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-24 15:35:05

Java中的byte是8位签名的。所以你会得到负值。

变化

代码语言:javascript
复制
System.out.println(s[i]);

代码语言:javascript
复制
System.out.println(s[i]&0xff);

得到相同的值。

更新:我刚刚看到Java8引入了Byte.toUnsignedInt()。这可能更容易读懂:

代码语言:javascript
复制
System.out.println(Byte.toUnsignedInt(s[i]));
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41832077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档