Dart API ReferencewebdriverBase64Decoder

Base64Decoder class

A simple base64 decoder class, used to decode web browser screenshots returned by WebDriver.

class Base64Decoder {

  static int getVal(String s, pos) {
    int code = s.charCodeAt(pos);
    if (code >= 65 && code < (65+26)) { // 'A'..'Z'
      return code - 65;
    } else if (code >= 97 && code < (97+26)) { // 'a'..'z'
      return code - 97 + 26;
    } else if (code >= 48 && code < (48+10)) { // '0'..'9'
      return code - 48 + 52;
    } else if (code == 43) { // '+'
      return 62;
    } else if (code == 47) { // '/'
      return 63;
    } else {
      throw 'Invalid character $s';
    }
  }

  static List<int> decode(String s) {
    var rtn = new List<int>();
    var pos = 0;
    while (pos < s.length) {
      if (s[pos+2] =='=') { // Single byte as two chars.
        int v = (getVal(s, pos) << 18 ) | (getVal(s, pos+1) << 12 );
        rtn.add((v >> 16) & 0xff);
        break;
      } else if (s[pos+3] == '=') { // Two bytes as 3 chars.
        int v = (getVal(s, pos) << 18 ) | (getVal(s, pos+1) << 12 ) |
            (getVal(s, pos + 2) << 6);
        rtn.add((v >> 16) & 0xff);
        rtn.add((v >> 8) & 0xff);
        break;
      } else { // Three bytes as 4 chars.
        int v = (getVal(s, pos) << 18 ) | (getVal(s, pos+1) << 12 ) |
            (getVal(s, pos + 2) << 6) | getVal(s, pos+3);
        pos += 4;
        rtn.add((v >> 16 ) & 0xff);
        rtn.add((v >> 8) & 0xff);
        rtn.add(v & 0xff);
      }
    }
    return rtn;
  }
}

Static Methods

int getVal(String s, pos) #

static int getVal(String s, pos) {
  int code = s.charCodeAt(pos);
  if (code >= 65 && code < (65+26)) { // 'A'..'Z'
    return code - 65;
  } else if (code >= 97 && code < (97+26)) { // 'a'..'z'
    return code - 97 + 26;
  } else if (code >= 48 && code < (48+10)) { // '0'..'9'
    return code - 48 + 52;
  } else if (code == 43) { // '+'
    return 62;
  } else if (code == 47) { // '/'
    return 63;
  } else {
    throw 'Invalid character $s';
  }
}

List<int> decode(String s) #

static List<int> decode(String s) {
  var rtn = new List<int>();
  var pos = 0;
  while (pos < s.length) {
    if (s[pos+2] =='=') { // Single byte as two chars.
      int v = (getVal(s, pos) << 18 ) | (getVal(s, pos+1) << 12 );
      rtn.add((v >> 16) & 0xff);
      break;
    } else if (s[pos+3] == '=') { // Two bytes as 3 chars.
      int v = (getVal(s, pos) << 18 ) | (getVal(s, pos+1) << 12 ) |
          (getVal(s, pos + 2) << 6);
      rtn.add((v >> 16) & 0xff);
      rtn.add((v >> 8) & 0xff);
      break;
    } else { // Three bytes as 4 chars.
      int v = (getVal(s, pos) << 18 ) | (getVal(s, pos+1) << 12 ) |
          (getVal(s, pos + 2) << 6) | getVal(s, pos+3);
      pos += 4;
      rtn.add((v >> 16 ) & 0xff);
      rtn.add((v >> 8) & 0xff);
      rtn.add(v & 0xff);
    }
  }
  return rtn;
}