java - 使用 Arduino 和 Java 库的 Base64 没有相同的结果

标签 java arduino base64

为什么在使用 JAVA 和 arduino 库以 Base64 编码字符串后没有得到相同的结果

Arduino 代码:

char data[] = "0123456789012345";
int inputLen = sizeof(data);
char encoded[100];
base64_encode(encoded, data, inputLen);

Serial.print("encoded base 64:");
Serial.println(encoded);

Arduino 代码结果

encoded base 64:MDEyMzQ1Njc4OTAxMjM0NQA=

Java代码:

static String message= "0123456789012345";
/////
String encoded = DatatypeConverter.printBase64Binary(message.getBytes());
System.out.println("encoded value is \t" + encoded);

Java 代码结果:

encoded value is    MDEyMzQ1Njc4OTAxMjM0NQ==

为什么arduino库在最后添加额外的数据?

谢谢!

最佳答案

因为字符串是以 null 结尾的。因此,当你写

char data[] = "0123456789012345";

您分配一个 17 字节的字符串,其十六进制内容为

0x30 0x31 0x32 0x33 0x34 0x35 0x36 0x37 0x38 0x39 0x30 0x31 0x32 0x33 0x34 0x35 0x00

该函数还在 Base64 编码中添加终端字节。如果你想放弃它,请将你的行更改为

int inputLen = sizeof(data) - 1;

关于java - 使用 Arduino 和 Java 库的 Base64 没有相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41342386/

相关文章:

android - Base64 编码导致最后有很多空格(我无法识别的空白字符)

java - 对于 api 低于 26 的设备,是否有替代的 base64 编码?

android - 如何在android中将base64转换为json?

java - 为什么 String[] args 没有像其他字符串数组一样进行初始化?

java - 如何调试 Java Web Start 应用程序?

java - 是否可以使用 Java rally REST API 将图像文件附加到 Rally 中的测试用例结果?

c - 使用 Arduino Uno r3 查找 int 值的倒数

arduino - 为什么序列值会与未发送的值一起打印两次?

java - 为什么枚举不能扩展 Java 中的类?

C++:与 Arduino 的串行接口(interface)