Arduino中C语言实现HTTP Auth Header的Base64编码问题排查
问题排查与解决
你的代码生成的Base64结果末尾有差异,大概率是这两个细节没处理:
Base64填充字符
=没加上
标准Base64规定,当输入字节数不是3的整数倍时,必须用=填充到长度为4的倍数。比如login:password一共14个字节,14除以3余2,编码后末尾需要补1个=(标准结果是bG9naW46cGFzc3dvcmQ=)。如果你用的encode_base64函数没做这个填充逻辑,结果自然会和网页/命令行工具生成的不一样。没加字符串终止符
\0
你定义的base64是纯字节数组,encode_base64只会把编码后的字节写进去,不会自动加\0。但Serial.println是按C风格字符串来输出的,找不到\0就会接着读数组里的垃圾数据,看起来末尾乱码或者和预期不符。解决很简单,编码完手动加一行:base64[base64_length] = '\0';
另外也可以核对下encode_base64的编码表,确保用的是标准的+/字符(HTTP Auth要求标准Base64,有些实现会用-_替代,这也会导致结果差异)。
总结下要做的:
- 检查并修改
encode_base64函数,确保输入长度非3倍数时补充对应数量的=。 - 编码完成后给
base64数组加\0终止符。
内容的提问来源于stack exchange,提问作者user3069232
相关产品推荐
相关产品推荐

