我在理解 Rust 中的特征概念时遇到一些问题。我正在尝试将一个简单的十六进制值编码为 Base64 但没有运气,这是我的代码(还有一个字符串到 Base64 的示例)
extern crate serialize;
use serialize::base64::{ToBase64, STANDARD};
use serialize::hex::{FromHex, ToHex};
fn main () {
let stringOfText = "This is a String";
let mut config = STANDARD;
println!("String to base64 = {}", stringOfText.as_bytes().to_base64(config));
// Can't figure out this
Vladimir 提供的解决方案适用于 0x 标记的十六进制值。现在我正在寻找转换以字符串表示的十六进制值:
extern crate serialize;
use serialize::base64::{ToBase64, STANDARD};
use serialize::hex::{FromHex, ToHex};
fn main () {
let stringOfText = "49276d206b696c6c696e6720796f757220627261696e206c696b65206120706f69736f6e6f7573206d757368726f6f6d";
let mut config = STANDARD;
println!("String to base64 = {}", stringOfText.from_hex().from_utf8_owned().as_bytes().to_base64(config));
// result should be: SSdtIGtpbGxpbmcgeW91ciBicmFpbiBsaWtlIGEgcG9pc29ub3VzIG11c2hyb29t
}
from_hex()
给我一个Vec<u8>
and .to_base64()
期待一个缓冲区u8,
首先我想转换Vec<u8>
字符串,然后使用as_bytes()
获得缓冲区,到目前为止仍然没有运气。
现在已经是 2017 年了,rustc-serialize 也已被弃用(请参阅here https://github.com/rust-lang-deprecated/rustc-serialize)。新的大序列化库称为serde https://serde.rs但我认为这对于这个问题来说有点沉重。
这是一个快速解决方案,可以手动从String
十六进制到 aVec<u8>
然后使用this https://crates.io/crates/base64转换为 base64 编码String
.
我不相信这个 for 循环是转换 a 的最佳解决方案String
十六进制转换为Vec<u8>
,但我对 Rust 相当陌生,这就是我所拥有的一切。感谢评论/改进。
(嘿,等一下,我认出了这些编码字符串,你在做什么吗?加密货币 https://cryptopals.com/sets/1/challenges/1?)
extern crate base64;
use std::u8;
use base64::{Engine as _, engine::general_purpose};
pub fn hex_to_base64(hex: String) -> String {
// Make vector of bytes from octets
let mut bytes = Vec::new();
for i in 0..(hex.len()/2) {
let res = u8::from_str_radix(&hex[2*i .. 2*i+2], 16);
match res {
Ok(v) => bytes.push(v),
Err(e) => println!("Problem with hex: {}", e),
};
};
general_purpose::STANDARD.encode(&bytes) // now convert from Vec<u8> to b64-encoded String
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)