Base64 使用 Arduino 和 Java 库没有相同的结果
Base64 no the same result using Arduino and Java library
为什么在使用 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 库
以 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;