我正在尝试制作多转换器。
我得到了意想不到的结果。
这是我的代码(此代码可以立即编译)
#include <iostream>
#include <string.h>
#include <iconv.h>
using namespace std;
static int DecodeMimeBase64[256] = {
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* 00-0F */
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* 10-1F */
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63, /* 20-2F */
52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1, /* 30-3F */
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14, /* 40-4F */
15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1, /* 50-5F */
-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40, /* 60-6F */
41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1, /* 70-7F */
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* 80-8F */
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* 90-9F */
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* A0-AF */
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* B0-BF */
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* C0-CF */
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* D0-DF */
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, /* E0-EF */
-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 /* F0-FF */
};
int fnBase64_decode(char *text, unsigned char *dst, int numBytes) {
char *cp;
int space_idx = 0, phase;
int d, prev_d = 0;
unsigned char c;
printf("text : %s\n", text);
printf("dst : %s\n", dst);
space_idx = 0;
phase = 0;
for (cp = text; *cp != '\0'; ++cp) {
d = DecodeMimeBase64[(int) *cp];
if (d != -1) {
switch (phase) {
case 0:
++phase;
break;
case 1:
c = ((prev_d << 2) | ((d & 0x30) >> 4));
if (space_idx < numBytes)
dst[space_idx++] = c;
++phase;
break;
case 2:
c = (((prev_d & 0xf) << 4) | ((d & 0x3c) >> 2));
if (space_idx < numBytes)
dst[space_idx++] = c;
++phase;
break;
case 3:
c = (((prev_d & 0x03) << 6) | d);
if (space_idx < numBytes)
dst[space_idx++] = c;
phase = 0;
break;
}
prev_d = d;
}
}
printf("text : %s\n", text);
printf("dst : %s\n", dst);
return space_idx;
}
int main() {
string SubjectString;
string Temp1SubString;
string Temp2SubString;
printf("SubjectString -1 : %s\n", SubjectString.c_str());
printf("Temp1SubString-1 : %s\n", Temp1SubString.c_str());
printf("Temp2SubString-1 : %s\n", Temp2SubString.c_str());
Temp1SubString = "VGVzdMbtwfY=?=";
fnBase64_decode((char *) Temp1SubString.c_str(), (unsigned char *) Temp2SubString.c_str(), strlen((char *) Temp1SubString.c_str()));
printf("SubjectString -2 : %s\n", SubjectString.c_str());
printf("Temp1SubString-2 : %s\n", Temp1SubString.c_str());
printf("Temp2SubString-2 : %s\n", Temp2SubString.c_str());
return 0;
}
结果应该是这样的
SubjectString -1 :
Temp1SubString-1 :
Temp2SubString-1 :
text : VGVzdMbtwfY=?=
dst :
text : VGVzdMbtwfY=?=
dst : Test▦▦▦▦
SubjectString -2 :
Temp1SubString-2 : VGVzdMbtwfY=?=
Temp2SubString-2 : Test▦▦▦▦
但在我的结果中
SubjectString -1 :
Temp1SubString-1 :
Temp2SubString-1 :
text : VGVzdMbtwfY=?=
dst :
text : VGVzdMbtwfY=?=
dst : Test▦▦▦▦
SubjectString -2 : Test▦▦▦▦
Temp1SubString-2 : VGVzdMbtwfY=?=
Temp2SubString-2 : Test▦▦▦▦
SubjectString -2:Test▦▦▦▦ - &gt;不应该发生!
但是SubjectString与Temp2SubString具有相同的值。
我需要一些帮助。
EDIT1:
我尝试使用SubjectString.clear();
在功能'fnBase64_decode'之后但它不起作用..
感谢。