首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中将base64数据解码为数组

在Python中将base64数据解码为数组
EN

Stack Overflow用户
提问于 2010-12-30 22:46:10
回答 4查看 2.8K关注 0票数 1

我使用这个方便的Javascript函数来解码一个base64字符串,并返回一个数组。

这是字符串:

代码语言:javascript
复制
base64_decode_array('6gAAAOsAAADsAAAACAEAAAkBAAAKAQAAJgEAACcBAAAoAQAA')

下面是返回的内容:

代码语言:javascript
复制
234,0,0,0,235,0,0,0,236,0,0,0,8,1,0,0,9,1,0,0,10,1,0,0,38,1,0,0,39,1,0,0,40,1,0,0

问题是我并不真正理解javascript函数:

代码语言:javascript
复制
var base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split("");
var base64inv = {}; 
for (var i = 0; i < base64chars.length; i++) { 
  base64inv[base64chars[i]] = i; 
}
function base64_decode_array (s)
{
  // remove/ignore any characters not in the base64 characters list
  //  or the pad character -- particularly newlines
  s = s.replace(new RegExp('[^'+base64chars.join("")+'=]', 'g'), "");

  // replace any incoming padding with a zero pad (the 'A' character is zero)
  var p = (s.charAt(s.length-1) == '=' ? 
          (s.charAt(s.length-2) == '=' ? 'AA' : 'A') : ""); 

  var r = [];

  s = s.substr(0, s.length - p.length) + p;

  // increment over the length of this encrypted string, four characters at a time
  for (var c = 0; c < s.length; c += 4) {

    // each of these four characters represents a 6-bit index in the base64 characters list
    //  which, when concatenated, will give the 24-bit number for the original 3 characters
    var n = (base64inv[s.charAt(c)] << 18) + (base64inv[s.charAt(c+1)] << 12) +
            (base64inv[s.charAt(c+2)] << 6) + base64inv[s.charAt(c+3)];


    // split the 24-bit number into the original three 8-bit (ASCII) characters
    r.push((n >>> 16) & 255);
    r.push((n >>> 8) & 255);
    r.push(n & 255);


  }
   // remove any zero pad that was added to make this a multiple of 24 bits
  return r;
}

"<<<“和">>>”字符的作用是什么。或者,Python有类似这样的函数吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-30 22:50:21

谁在乎呢。Python有更简单的方法来做同样的事情。

代码语言:javascript
复制
[ord(c) for c in '6gAAAOsAAADsAAAACAEAAAkBAAAKAQAAJgEAACcBAAAoAQAA'.decode('base64')]
票数 11
EN

Stack Overflow用户

发布于 2010-12-30 22:48:53

在Python中,我希望您只使用base64 module...

..。但是在回答你关于<<>>>的问题时

  • <<是左移位运算符;结果是第一个操作数左移第二个操作数位数;例如,10100.
  • >>>是非符号扩展的右移位运算符,5 << 220,因为5是二进制101;结果是第一个操作数右移了第二个操作数位数...最左边的位总是用0填充。
票数 5
EN

Stack Overflow用户

发布于 2010-12-30 22:49:50

为什么不干脆:

代码语言:javascript
复制
from binascii import a2b_base64, b2a_base64
encoded_data = b2a_base64(some_string)
decoded_string = a2b_base64(encoded_data)

def base64_decode_array(string):
    return [ord(c) for c in a2b_base64(string)]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4563508

复制
相关文章

相似问题

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