我需要一个简单的事情:在base64中编码一个字符串。我找到了一个例子:
extern crate serialize;
use serialize::base64::{mod, ToBase64};
use serialize::hex::FromHex;
fn main() {
let input = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d";
let result = input.from_hex().unwrap().as_slice().to_base64(base64::STANDARD);
println!("{}", result);
}
接缝可以使用,但我不明白为什么输入只包含HEX中的字符。而且,这个Python代码会产生不同的结果:
base64.b64encode(input) # =>
'NDkyNzZkMjA2YjY5NmM2YzY5NmU2NzIwNzk2Zjc1NzIyMDYyNzI2MTY5NmUyMDZjNjk2YjY1MjA2MTIwNzA2ZjY5NzM2ZjZlNmY3NTczMjA2ZDc1NzM2ODcyNmY2ZjZk'
所以我决定做以下事情:
//....
let input = "some string 123";
let result2 = input.unwrap().as_slice().to_base64(base64::STANDARD);
let result3 = input.as_slice().to_base64(base64::STANDARD);
由于错误,它没有编译:
error: type `&str` does not implement any method in scope named `unwrap`
test1.rs:9 let result2 = input.unwrap().as_slice().to_base64(base64::STANDARD);
^~~~~~~~
test1.rs:9:34: 9:44 error: multiple applicable methods in scope [E0034]
那么如何在base64中编码一个简单的字符串?
答案 0 :(得分:2)
to_base64
仅针对一片字节定义,因此您必须首先在字符串上调用as_bytes
:
extern crate serialize;
use serialize::base64::{mod, ToBase64};
fn main() {
let input = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d";
let result = input.as_bytes().to_base64(base64::STANDARD);
println!("{}", result);
}
输入的类型为&static str
:
let input = "some string 123";
&'static str
没有定义解包:
let result2 = input.unwrap().as_slice().to_base64(base64::STANDARD);
您已有切片(&str
),但需要&[u8]
:
let result3 = input.as_slice().to_base64(base64::STANDARD);
答案 1 :(得分:1)
如果您没有十六进制输入,请尝试以下操作:
let result = input.as_bytes().to_base64(base64::STANDARD);