如何在 Rust 中将十六进制值转换为 Base64

2024-01-28

我在理解 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(使用前将#替换为@)

如何在 Rust 中将十六进制值转换为 Base64 的相关文章

随机推荐

  • eclipse cdt:从 pkg-config 添加包含路径

    我想将动态配置路径 从 pkg config 生成 添加到我的项目中 这基本上是针对像 boost 这样的第三方依赖项 因此工作区包含不合适 文件系统也不包含 因为这将是硬编码的 每个开发人员都必须手动更改它 我在项目属性 gt c 常规
  • 如何在Python中的多个异步进程之间进行同步?

    我有一个使用 fastapi 的异步 http web 服务 我在服务器上的不同端口上运行同一服务的多个实例 并且前面有一个 nginx 服务器 因此我可以全部利用它们 我有一个特定的资源 需要保护只有一个客户端可以访问它 app get
  • dyld:未找到符号:_ffi_prep_closure_loc(在 Mac 上)

    我做了一个常规的flutter run今天在我的 Mac 上 针对我的 iPhone 模拟器 出现了这些错误 Error output from CocoaPods dyld lazy symbol binding failed Symbo
  • ASCII 比较和字符串比较的区别

    我正在使用 C 当我比较两个字符值时 它会向我发送正确的输出 例如 CompareTo Its sending me positive value 12 means gt is true 但是当我比较两个相同值的字符串时 它会向我发送不同的
  • 带有参数和通配符的 SQL LIKE 运算符

    我有一个查询 我想返回名称中具有特定字符串且两侧带有通配符的所有客户端 因此 输入可能是 Smith 我想返回 The John Smith Company 或 Smith and Bros 等所有内容 我希望 Client 得到提示 因此
  • 在 Angular 和 Chrome DevTools 中提取 css 文件的问题

    I use ng serve sm ec提取 scss 文件angular 5 但是当我做出改变时Elements的翁格莱Chrome DevTools像那样 它没有自动保存 我必须改变它Sourcesonglet 并保存以使其正常工作 我
  • iTextSharp - 如何打开/读取/提取文件附件?

    我有一些 PDF 文件 其中包含两个带有静态名称的附加文件 我想使用 iTextSharp 将这些文件提取到临时目录 以便我可以进一步使用它们 我尝试按照教程进行操作但当我遇到问题时iTextSharp text pdf PdfReader
  • 在 C# 中设置 MimeType

    在 C 中设置 mimetypes 是否有比我尝试做的更好的方法 提前致谢 static String MimeType string filePath String ret null FileInfo file new FileInfo
  • C++ 中网络掩码转换为 CIDR 格式

    我必须将 2 个 DWORD IP 地址和网络掩码转换为 CDIR 格式 所以我有 2 个 DWORD 对应 1 1 1 1 和 255 255 255 255 我想拿出字符串 1 1 1 1 32 对此有什么想法吗 Thanks 最简单的
  • xml.etree.ElementTree - 设置 xmlns = '...' 时遇到问题

    我肯定错过了什么 我正在尝试设置谷歌产品提要 但我很难注册命名空间 例子 路线在这里 https support google com merchants answer 160589 https support google com mer
  • Oracle NUMBER 类型是否可能溢出?

    我正在使用名为 Appworx 的进程调度软件 其中 每个进程和子进程可以有任意数量的 条件 如果条件为真 则采取一些条件操作 goto 语句是可能的条件操作之一 其中一个普通整数是标签 每个条件从 1 开始编号 我想使用此功能来循环评估和
  • 将 SDL 应用程序移植到 iOS

    我仅使用 SDL 无 OpenGL 用 C 创建了一个小游戏 并希望将其移植到 iOS 6 我无意公开发布 仅供个人使用 该应用程序仅使用准系统 SDL 库本身 没有 ttf 或图像 那么 将游戏移植到 iOS 6 的最佳无麻烦方式是什么
  • 在可区分联合中使用 F# 中的 and 关键字

    我今天面临以下 DU 声明 type Grammar Definition list and Definition Def of string Expression and Range Char of char Range of char
  • 使用htaccess重写使子目录成为其自己的根目录以用于根相对路径请求

    我可以使用 htaccess 捕获来自某个子目录的请求并使该目录使用自身作为任何根相对路径请求的根目录吗 例如 如果我有 http www example com subFIXED subANY restofpath 其中 subFIXED
  • 如何检测何时使用 MKUserTrackingBarButtonItem

    我目前正在尝试找到一种方法来检测何时MKUserTrackingBarButtonItem被使用 除了处理mapView didUpdateUserLocation 委托方法 我尝试设置ActionMKUserTrackingBarButt
  • 在cowplot::plot_grid 的多面板图中设置单个面板的宽度和高度

    我正在使用多面板图ggplot2 and cowplot包 但我需要更改单个图的高度 最简单地用一个例子来展示 library ggplot2 library cowplot p1 lt ggplot iris aes Sepal Widt
  • 表单 Google 脚本防止重复

    我正在制作一个谷歌表单 有一个名为 name 的字段 其中包含其他字段 如标题 公司和电子邮件地址 如果数据库中已经有一个特定的人 我希望其他信息用新信息替换旧信息 即更新功能 但我在使用 Google Apps 脚本执行此操作时遇到麻烦
  • 如何在使用通用开发服务器的团队环境中使用 Coldfusion Builder 2?

    我们的 CF 9 开发环境位于通用开发服务器 DEVWEB 上 我们正在考虑从 Dreamweaver 迁移到 Coldfusion Builder 作为我们的 IDE 我担心 CF Builder 在项目根目录中放置 settings 目
  • 详细了解大量 3x3 矩阵的逆算法

    我遵循这个原始帖子 用于反转大量 3x3 矩阵的 PyCuda 代码 https stackoverflow com questions 55357826 pycuda adapt existing code and kernel code
  • 如何在 Rust 中将十六进制值转换为 Base64

    我在理解 Rust 中的特征概念时遇到一些问题 我正在尝试将一个简单的十六进制值编码为 Base64 但没有运气 这是我的代码 还有一个字符串到 Base64 的示例 extern crate serialize use serialize