TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
base64.cpp
Go to the documentation of this file.
1 #include "base64.h"
2 
3 namespace QAlgorithm
4 {
5  static const char *base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
6 
10  inline static bool isBase64(unsigned char c)
11  {
12  return isalnum(c) || (c == '+') || (c == '/');
13  }
14 }
15 
16 TTKString QAlgorithm::base64Encode(const unsigned char *bytes, unsigned int length)
17 {
18  TTKString ret;
19  int i = 0, j = 0;
20  unsigned char char_array_3[3], char_array_4[4];
21 
22  while(length--)
23  {
24  char_array_3[i++] = *(bytes++);
25  if(i == 3)
26  {
27  char_array_4[0] = (char_array_3[0] & 0xFC) >> 2;
28  char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xF0) >> 4);
29  char_array_4[2] = ((char_array_3[1] & 0x0F) << 2) + ((char_array_3[2] & 0xC0) >> 6);
30  char_array_4[3] = char_array_3[2] & 0x3F;
31 
32  for(i = 0; i < 4; ++i)
33  {
34  ret += base64_chars[char_array_4[i]];
35  }
36  i = 0;
37  }
38  }
39 
40  if(i)
41  {
42  for(j = i; j < 3; ++j)
43  {
44  char_array_3[j] = '\0';
45  }
46 
47  char_array_4[0] = (char_array_3[0] & 0xFC) >> 2;
48  char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xF0) >> 4);
49  char_array_4[2] = ((char_array_3[1] & 0x0F) << 2) + ((char_array_3[2] & 0xC0) >> 6);
50  char_array_4[3] = char_array_3[2] & 0x3F;
51 
52  for(j = 0; j < i + 1; ++j)
53  {
54  ret += base64_chars[char_array_4[j]];
55  }
56 
57  while((i++ < 3))
58  {
59  ret += '=';
60  }
61 
62  }
63  return ret;
64 }
65 
67 {
68  int length = bytes.length();
69  int i = 0, j = 0, in = 0;
70  unsigned char char_array_4[4], char_array_3[3];
71 
72  TTKString ret;
73  const TTKString container(base64_chars);
74 
75  while(length-- && (bytes[in] != '=') && isBase64(bytes[in]))
76  {
77  char_array_4[i++] = bytes[in]; in++;
78  if(i ==4)
79  {
80  for(i = 0; i < 4; ++i)
81  {
82  char_array_4[i] = container.find(char_array_4[i]);
83  }
84 
85  char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
86  char_array_3[1] = ((char_array_4[1] & 0xF) << 4) + ((char_array_4[2] & 0x3C) >> 2);
87  char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
88 
89  for(i = 0; i < 3; ++i)
90  {
91  ret += char_array_3[i];
92  }
93  i = 0;
94  }
95  }
96 
97  if(i)
98  {
99  for(j = i; j < 4; ++j)
100  {
101  char_array_4[j] = 0;
102  }
103 
104  for(j = 0; j <4; j++)
105  {
106  char_array_4[j] = container.find(char_array_4[j]);
107  }
108 
109  char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4);
110  char_array_3[1] = ((char_array_4[1] & 0xF) << 4) + ((char_array_4[2] & 0x3C) >> 2);
111  char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3];
112 
113  for(j = 0; j < i - 1; ++j)
114  {
115  ret += char_array_3[j];
116  }
117  }
118 
119  return ret;
120 }
#define isalnum(__c__)
Definition: split.c:38
TTKString base64Decode(const TTKString &bytes)
Definition: base64.cpp:66
The namespace of the algorithm.
static const char * base64_chars
Definition: base64.cpp:5
TTKString base64Encode(const unsigned char *bytes, unsigned int len)
Definition: base64.cpp:16
std::string TTKString
Definition: ttkglobal.h:121
static bool isBase64(unsigned char c)
Definition: base64.cpp:10