MCPcopy Create free account
hub / github.com/bitcoinxt/bitcoinxt / EncodeBase32

Function EncodeBase32

src/utilstrencodings.cpp:232–289  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

230}
231
232string EncodeBase32(const unsigned char* pch, size_t len)
233{
234 static const char *pbase32 = "abcdefghijklmnopqrstuvwxyz234567";
235
236 string strRet="";
237 strRet.reserve((len+4)/5*8);
238
239 int mode=0, left=0;
240 const unsigned char *pchEnd = pch+len;
241
242 while (pch<pchEnd)
243 {
244 int enc = *(pch++);
245 switch (mode)
246 {
247 case 0: // we have no bits
248 strRet += pbase32[enc >> 3];
249 left = (enc & 7) << 2;
250 mode = 1;
251 break;
252
253 case 1: // we have three bits
254 strRet += pbase32[left | (enc >> 6)];
255 strRet += pbase32[(enc >> 1) & 31];
256 left = (enc & 1) << 4;
257 mode = 2;
258 break;
259
260 case 2: // we have one bit
261 strRet += pbase32[left | (enc >> 4)];
262 left = (enc & 15) << 1;
263 mode = 3;
264 break;
265
266 case 3: // we have four bits
267 strRet += pbase32[left | (enc >> 7)];
268 strRet += pbase32[(enc >> 2) & 31];
269 left = (enc & 3) << 3;
270 mode = 4;
271 break;
272
273 case 4: // we have two bits
274 strRet += pbase32[left | (enc >> 5)];
275 strRet += pbase32[enc & 31];
276 mode = 0;
277 }
278 }
279
280 static const int nPadding[5] = {0, 6, 4, 3, 1};
281 if (mode)
282 {
283 strRet += pbase32[left];
284 for (int n=0; n<nPadding[mode]; n++)
285 strRet += '=';
286 }
287
288 return strRet;
289}

Callers 2

ToStringIPMethod · 0.85
BOOST_AUTO_TEST_CASEFunction · 0.85

Calls 2

reserveMethod · 0.80
sizeMethod · 0.45

Tested by 1

BOOST_AUTO_TEST_CASEFunction · 0.68