std::string base64_encode()

in image/image.cpp [51:83]


std::string base64_encode(const std::vector<uint8_t>& input) {
	std::string encoded;
	encoded.reserve(((input.size() / 3) + (input.size() % 3 > 0)) * 4);
	uint32_t temp;
	std::vector<uint8_t>::const_iterator cursor = input.begin();
	for (size_t idx = 0; idx < input.size() / 3; idx++) {
		temp = (*cursor++) << 16;  //Convert to big endian
		temp += (*cursor++) << 8;
		temp += (*cursor++);
		encoded.append(1, encodeLookup[(temp & 0x00FC0000) >> 18]);
		encoded.append(1, encodeLookup[(temp & 0x0003F000) >> 12]);
		encoded.append(1, encodeLookup[(temp & 0x00000FC0) >> 6]);
		encoded.append(1, encodeLookup[(temp & 0x0000003F)]);
	}
	switch (input.size() % 3) {
	case 1:
		temp = (*cursor++) << 16;
		encoded.append(1, encodeLookup[(temp & 0x00FC0000) >> 18]);
		encoded.append(1, encodeLookup[(temp & 0x0003F000) >> 12]);
		encoded.append(2, padCharacter);
		break;
	case 2:
		temp = (*cursor++) << 16;
		temp += (*cursor++) << 8;
		encoded.append(1, encodeLookup[(temp & 0x00FC0000) >> 18]);
		encoded.append(1, encodeLookup[(temp & 0x0003F000) >> 12]);
		encoded.append(1, encodeLookup[(temp & 0x00000FC0) >> 6]);
		encoded.append(1, padCharacter);
		break;
	}
	encoded = encoded;
	return encoded;
}