Base64 문자열을 디코딩하고 마지막으로 jpg 이미지를 출력했습니다.C++ base64_decode() return null
내가 발견 한 Base64 디코드 기능으로 Base64 문자열을 디코하려고하면 here 빈 문자열이납니다. 여기
내 코드입니다 : ". encodedString는 base64로 문자열은 다음과 같습니다"std::string decodedString, encodedString;
decodedString = base64_decode(encodedString);
하고 base64_decode 기능 :
static const std::string base64_chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"/";
static inline bool is_base64(unsigned char c) {
return (isalnum(c) || (c == '+') || (c == '/'));
}
std::string base64_decode(std::string const& encoded_string) {
int in_len = encoded_string.size();
int i = 0;
int j = 0;
int in_ = 0;
unsigned char char_array_4[4], char_array_3[3];
std::string ret;
while (in_len-- && (encoded_string[in_] != '=') && is_base64(encoded_string[in_])) {
char_array_4[i++] = encoded_string[in_]; in_++;
if (i ==4) {
for (i = 0; i <4; i++)
char_array_4[i] = base64_chars.find(char_array_4[i]);
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
for (i = 0; (i < 3); i++)
ret += char_array_3[i];
i = 0;
}
}
if (i) {
for (j = i; j <4; j++)
char_array_4[j] = 0;
for (j = 0; j <4; j++)
char_array_4[j] = base64_chars.find(char_array_4[j]);
char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2);
char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
for (j = 0; (j < i - 1); j++) ret += char_array_3[j];
}
return ret;
}
의 내 Base64로 :
/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAIBAQIBAQICAgICAgICAwUDAwMDAwYEBAMFBwYHBwcGBwcICQsJCAgKCAcHCg0KCgsMDAwMBwkODw0MDgsMDAz/2wBDAQICAgMDAwYDAwYMCAcIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCAIOAcADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9/KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoorz79qv9p7wh+xj+z14q+J/jy+l0/wn4PtPtl/NFH5spBdY0jjTI3O8joirkZZgKAPQaK/Lb/iMC/Y7/wCfz4lf+Ez/APba9g/YX/4OJv2bf+Chn7RGnfC7wBqniqLxZq9t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/wAITS//AIxR/wAOyP2bf+je/gf/AOEJpf8A8Yr3CigD8G/+Duf/AIJSeBfh5+yf4L+Mvwr+H/hLwUvgrVjpPiWDw5otvpsNzZ3u1YLiZYUVWMVwiRgkZ/0vHQDH889f3Y/tlfszaP8Atl/sqfED4Wa6EXTfHWh3OlNKy7vskrofJnA/vRShJF/2kFfw1fE74c6x8HviT4g8JeIbR7DXvC+pXGk6lbN963uYJWilQ/R0YfhQB/TF/wAGdf7dP/C+f2D9c+D2r3nm6/8ABvUf9BWRsvJpF6zyw4zy3lzi5Q44VTCOMiv1+r+On/g3U/bp/wCGD/8Agqf4B1bULz7J4T8cyf8ACHeICzbY1t7x0WKVj0CxXK28hbsiOO9f2LUAfyI/8HTXxok+MH/BaX4mW4lMtl4LtdM8OWnOdqxWcU0q+2LieeuF/wCDdv4Mx/HP/gs78B9KnhEtvpWuSeIZCRlYzp1tNfRsf+2sEYHuRXnH/BYHxXJ40/4KsftHX8jF/wDi5GvWyE944b+aFP8Ax2Na+xP+DPHwzFr3/BX8XUihn0XwRq17GT/CzPbQZ/75mb86AP6q6KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/Z
이미지 그냥 A7 내가 몇 웹 사이트에서 확인했는데 잘 작동합니다. 또한이 코드 블록은 다른 프로젝트에서 완벽하게 작동합니다. 내가 Clion 2017.3, 우분투 16.04를 사용하고 있습니다 그런데
, CXX_STANDARD 11
2 진 버퍼에'std :: string'을 사용하는 것은 좋지 않습니다. 대신 std :: vector 대신에 (또는 unsigned char)를 사용합니다. 나는 그 문자열이 비어 있지 않을 것이라고 생각합니다. –
Slava
@Slava 소스도 문자열입니다. 그리고 디코더 기능도 디버깅했습니다. return "ret"값은 항상 null입니다. 예, 그렇습니다. :: string은 바이너리 버퍼를 잘못 생각할 수도 있지만 문제는 아닙니다. –
"가치는 언제나"는 무엇을 의미합니까? 이 문자열은 0 바이트를 포함 할 수있는 바이너리 데이터를 가지며 'std :: cout'에 대한 출력은 아무 것도 표시하지 않습니다. 그래서 나는 좋은 생각이 아니라고 말했다. ret.length()가주는 것은 무엇입니까? – Slava