用于Base64解码的Python和Java之间的区别

时间:2017-01-24 15:31:35

标签: java python

这是一个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   五   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<s.length;i++){
  System.out.println(s[i]);
}

Ouptput

  

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

我的问题

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

1 个答案:

答案 0 :(得分:5)

Java中的

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

更改

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

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

获得相同的值。

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

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