对于某些使用C的示例,Base64解码不正确
大家好,新年快乐 我想知道你们这些聪明人是否能帮助我。 我没有从解码以下内容中获得正确的输出:对于某些使用C的示例,Base64解码不正确,c,gcc,base64,C,Gcc,Base64,大家好,新年快乐 我想知道你们这些聪明人是否能帮助我。 我没有从解码以下内容中获得正确的输出: CChcAAjpqs2/SsTt1uu4bw== 我正在使用以下工具: CChcAAjpqs2/SsTt1uu4bw== base64.c/h从这里开始 我也试过一两次,结果也一样。 我的编译器是: gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5) 这是我简单的主语 #include <stdio.h> #include <string.h>
CChcAAjpqs2/SsTt1uu4bw==
我正在使用以下工具:
CChcAAjpqs2/SsTt1uu4bw==
base64.c/h从这里开始
我也试过一两次,结果也一样。
我的编译器是:
gcc版本4.6.3(Ubuntu/Linaro 4.6.3-1ubuntu5)
这是我简单的主语
#include <stdio.h>
#include <string.h>
#include "base64.h"
int main(void)
{
char* buf = 0;
int buflen = 0;
buf = b64_decode("CChcAAjpqs2/SsTt1uu4bw==");
if (buf)
{
buflen = (int)strlen(buf);
printf("buf=%s\nbuflen=%d\n",buf,buflen);
}
return 0;
}
我没想到。例如,我可以成功解码其他示例
HLJjwtxaMw+ZKPDEOqaf7g==
所以我知道代码并不是完全错误的。最后,我还发现了一种从终端进行测试的奇妙方法,结果是一个长度超过3的字符数组,看起来差不多正确
echo `echo CChcAAjpqs2/SsTt1uu4bw== | python -m base64 -d`
对于新手程序员的任何建议都将不胜感激。多谢各位
Barry您解码的字符串包含控制字符。结果以十六进制表示:
08 28 5c 00 08 e9 aa cd bf 4a c4 ed d6 eb b8 6f
ASCII中的08
是一个退格,这就是输出中buf
之后的=
丢失的原因28 5c
是(\
和00
是\0
标记字符串的结尾,因此之后不再有输出
您不能以可读字符输出每个解码字符串。您必须在输出之前用转义序列或其他东西替换它们。实际上,我不知道是否有标准的库函数用于此。尤其是\0
字符可能会给您带来其他一些函数的麻烦
buflen = (int)strlen(buf);
buf
不是空分隔字符串,strlen
将不起作用。
查看ap\u base64 decode\u len()
,它似乎返回解码的buf长度
printf("buf=%s\nbuflen=%d\n",buf,buflen);
此处相同,%s
将不起作用。您将解码的buf视为字符串。
使用%d
(获取ascii值)或十六进制逐字节打印
试试这个,你会看到发生了什么
char* buf = 0;
int buflen = 0;
buflen = ap_base64decode_len("CChcAAjpqs2/SsTt1uu4bw==");
buf = b64_decode("CChcAAjpqs2/SsTt1uu4bw==");
printf("buflen=%d\n",buflen);
int i;
for(i=0; i < buflen; i++)
{
printf("%d,", (unsigned char) buf[i]);
}
return 0;
char*buf=0;
int-buflen=0;
buflen=ap_base64解码长度(“CChcAAjpqs2/SSTT1U4BW=”;
buf=b64_解码(“CChcAAjpqs2/SSTT1U4BW=”;
printf(“buflen=%d\n”,buflen);
int i;
对于(i=0;i(base64-d | xxd)非常感谢民进党。