gpt4 book ai didi

c++ - Base64 加密/解密 (C++ Builder XE)

转载 作者:行者123 更新时间:2023-11-28 07:01:34 25 4
gpt4 key购买 nike

我需要在 C++ Builder XE 中加密字符串的内容,并在互联网上找到这段代码:

AnsiString Base64Encode(AnsiString slToEnc)
{
//The Base64 Table
const char Base64Table[64]=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
char * buftoenc = slToEnc.c_str();
int bufsize = slToEnc.Length() + 1;
char * encbuf = new char[slToEnc.Length() * 5];
encbuf[0] = '\0'; int ilStrLen = -1;
int i=0; int b64byte[5];
unsigned char *buftemp;
AnsiString slRetVal = EmptyStr;
buftemp=(unsigned char *)malloc(bufsize+2);
strcpy(buftemp,buftoenc);

if (fmod(bufsize,3)==1)
{
buftemp[bufsize]='\0';
buftemp[bufsize+1]='\0';
}

if (fmod(bufsize,3)==2)buftemp[bufsize]='\0';

while (i<bufsize)
{
b64byte[0]=buftemp[i]>>2;
b64byte[1]=((buftemp[i]&3)<<4)|(buftemp[i+1]>>4);
b64byte[2]=((buftemp[i+1]&0x0F)<<2)|(buftemp[i+2]>>6);
b64byte[3]=buftemp[i+2]&0x3F;
encbuf[i+(i/3)]=Base64Table[b64byte[0]];
encbuf[i+(i/3)+1]=Base64Table[b64byte[1]];
encbuf[i+(i/3)+2]=Base64Table[b64byte[2]];
encbuf[i+(i/3)+3]=Base64Table[b64byte[3]];
i+=3;
}

free(buftemp);

if (fmod(bufsize,3)==0) ilStrLen = bufsize*8/6;
else if (fmod(bufsize,3)==1) ilStrLen = ((bufsize+2)*8/6)-2;
else if (fmod(bufsize,3)==2) ilStrLen = ((bufsize+1)*8/6)-1;
else ilStrLen = -1;

if(ilStrLen> 0) slRetVal = AnsiString(encbuf).SubString(1, ilStrLen);
if(encbuf != NULL) { delete encbuf; encbuf = NULL; }

return slRetVal;
}

// Calling function in a button component =>

Base64Encode(Memo1->Text);

但它会在编译时生成一个小错误,引用此源代码中的函数 std::fmod(double, double) 与 math.h 库的相同函数之间的歧义。

一些建议?

最佳答案

为了解决歧义,您需要为 fmod 函数指定命名空间。只需更改行:

if (fmod(bufsize,3)==1)

到:

if (std::fmod(bufsize,3)==1)

它应该为你编译。

关于c++ - Base64 加密/解密 (C++ Builder XE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22395365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com