gpt4 book ai didi

c - C 中的 Base64 编码 - 这个杂散 "X"来自哪里?

转载 作者:行者123 更新时间:2023-11-30 15:48:09 25 4
gpt4 key购买 nike

我正在使用这里的 Ryyst 代码 - How do I base64 encode (decode) in C? - 对图像文件进行 Base64 编码并将其插入 HTML 文档中。

它有效! - 除了在 Base64 编码输出的第二行上,该行末尾有一个杂散的“X”。

无论二进制文件有多大(我已经尝试过很多次),它始终是第二行,并且只有第二行。

如果我手动删除杂散的“X”,则编码数据与 Base64 实用程序的输出完全匹配,并且浏览器可以正确解码图像。

我尝试在每个字符数组的末尾添加“\0”,以确保它们正确终止(没有区别)。我检查过“buffer”始终为 60 字节,并且 output_length 始终为 80 字节(它们是)。我已经阅读并重新阅读了 Ryyst 的代码,看看是否有任何东西可能导致它(没有看到任何东西,但我是 C n00b)。我跳了一场雨舞。我寻找一位处女来扔下一座火山(在这附近找不到)。该错误仍然存​​在。

以下是代码的重要部分 -

while (cgiFormFileRead(CoverImageFile, buffer, BUFFERLEN, &got) ==cgiFormSuccess)
{
if(got>0)
{
fputs(base64_encode(buffer, got, &output_length), targetfile);
fputs("\n", targetfile);
}
}

base64_encode 函数是 -

char *base64_encode(const unsigned char *data, size_t input_length,
size_t *output_length)
{

*output_length = 4 * ((input_length + 2) / 3);

char *encoded_data = malloc(*output_length);
if (encoded_data == NULL)
return NULL;
int i = 0, j = 0;
for (i = 0, j = 0; i < input_length;)
{

uint32_t octet_a = i < input_length ? data[i++] : 0;
uint32_t octet_b = i < input_length ? data[i++] : 0;
uint32_t octet_c = i < input_length ? data[i++] : 0;

uint32_t triple = (octet_a << 0x10) + (octet_b << 0x08) + octet_c;

encoded_data[j++] = encoding_table[(triple >> 3 * 6) & 0x3F];
encoded_data[j++] = encoding_table[(triple >> 2 * 6) & 0x3F];
encoded_data[j++] = encoding_table[(triple >> 1 * 6) & 0x3F];
encoded_data[j++] = encoding_table[(triple >> 0 * 6) & 0x3F];
}

for (i = 0; i < mod_table[input_length % 3]; i++)
encoded_data[*output_length - 1 - i] = '=';

return encoded_data;
}

(如您所见,我也在使用 cgic 库 v 205,但我不认为问题出在那里,因为它提供了正确的字节数)(BUFFERLEN 是一个常数,等于 60。)

我做错了什么,伙计们?

(更令人沮丧的是,我之前/确实/让 Ryyst 的算法完美地工作过一次,所以他的代码/确实/可以工作。)

我正在基于 ARM 的 Debian Linux 系统上使用 gcc 进行编译,如果这有什么区别的话。

最佳答案

将您的函数与已删除的原始函数进行比较:

encoded_data[j++] = encoding_table[(triple >> 0 * 6) & 0x3F];

除此之外,功能是相同的,我猜这只是复制错误。

问题是您使用的是 BUFFERLEN 而不是查看 got,它返回读取的数据量,第二行没有读取完整的 60 个字符,因此您正在对缓冲区末尾的任何垃圾进行编码。

关于c - C 中的 Base64 编码 - 这个杂散 "X"来自哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17000166/

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