Go to the documentation of this file.
15 #include "absl/strings/internal/escaping.h"
17 #include "absl/base/internal/endian.h"
18 #include "absl/base/internal/raw_logging.h"
22 namespace strings_internal {
25 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
42 size_t len = (input_len / 3) * 4;
44 if (input_len % 3 == 0) {
49 }
else if (input_len % 3 == 1) {
69 assert(
len >= input_len);
74 size_t szdest,
const char* base64,
76 static const char kPad64 =
'=';
78 if (szsrc * 4 > szdest * 3)
return 0;
80 char* cur_dest =
dest;
81 const unsigned char* cur_src = src;
83 char*
const limit_dest =
dest + szdest;
84 const unsigned char*
const limit_src = src + szsrc;
89 while (cur_src < limit_src - 3) {
92 cur_dest[0] = base64[
in >> 18];
94 cur_dest[1] = base64[
in >> 12];
96 cur_dest[2] = base64[
in >> 6];
98 cur_dest[3] = base64[
in];
105 szdest =
static_cast<size_t>(limit_dest - cur_dest);
106 szsrc =
static_cast<size_t>(limit_src - cur_src);
116 if (szdest < 2)
return 0;
118 cur_dest[0] = base64[
in >> 2];
120 cur_dest[1] = base64[
in << 4];
124 if (szdest < 2)
return 0;
125 cur_dest[0] = kPad64;
126 cur_dest[1] = kPad64;
135 if (szdest < 3)
return 0;
137 cur_dest[0] = base64[
in >> 10];
139 cur_dest[1] = base64[
in >> 4];
141 cur_dest[2] = base64[
in << 2];
145 if (szdest < 1)
return 0;
146 cur_dest[0] = kPad64;
156 if (szdest < 4)
return 0;
159 cur_dest[0] = base64[
in >> 18];
161 cur_dest[1] = base64[
in >> 12];
163 cur_dest[2] = base64[
in >> 6];
165 cur_dest[3] = base64[
in];
176 return static_cast<size_t>(cur_dest -
dest);
const ABSL_CONST_INIT char kBase64Chars[]
uint16_t Load16(const void *p)
#define ABSL_NAMESPACE_END
#define ABSL_NAMESPACE_BEGIN
size_t Base64EscapeInternal(const unsigned char *src, size_t szsrc, char *dest, size_t szdest, const char *base64, bool do_padding)
uint32_t Load32(const void *p)
size_t CalculateBase64EscapedLenInternal(size_t input_len, bool do_padding)
#define ABSL_RAW_LOG(severity,...)
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:19