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

时间:2016-12-27 09:24:10

标签: 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库最后会添加额外的数据?

谢谢!

1 个答案:

答案 0 :(得分:1)

因为字符串以空值终止。因此,当你写

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;