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

ske*_*rit 1 javascript python arrays base64 decode

我正在使用这个方便的Javascript函数来解码base64字符串并获得一个数组作为回报.

这是字符串:

base64_decode_array('6gAAAOsAAADsAAAACAEAAAkBAAAKAQAAJgEAACcBAAAoAQAA')
Run Code Online (Sandbox Code Playgroud)

这是返回的内容:

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
Run Code Online (Sandbox Code Playgroud)

问题是我真的不懂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;
}
Run Code Online (Sandbox Code Playgroud)

那些"<<<"和">>>"字符的功能是什么.或者Python有这样的功能吗?

Ign*_*ams 11

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

[ord(c) for c in '6gAAAOsAAADsAAAACAEAAAkBAAAKAQAAJgEAACcBAAAoAQAA'.decode('base64')]
Run Code Online (Sandbox Code Playgroud)

  • 除了优秀的答案之外,"谁在乎"的+1. (5认同)

Jon*_*eet 5

在Python中我希望你只使用base64模块 ......

...但是回答你的问题<<>>>:

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