我正在写一个Rust程序,它读取I2C总线并保存数据.当我读了I2C总线,我得到这样的十六进制值0x11,0x22等等.
现在,我只能将其作为字符串处理并按原样保存.有没有办法可以解析为整数?它有内置功能吗?
我试图找到给定数字的所有数字的总和,如134给出8.
我的计划是通过将数字转换为.to_string()使用数来迭代数字.chars(),然后使用char迭代数字.然后我想将char迭代中的每个转换为a char并添加到变量中.我想得到这个变量的最终值.
我尝试使用下面的代码将a sum转换为z(Playground):
fn main() {
let x = "123";
for y in x.chars() {
let z = y.parse::<i32>().unwrap();
println!("{}", z + 1);
}
}
Run Code Online (Sandbox Code Playgroud)
但它会导致此错误:
error[E0599]: no method named `parse` found for type `char` in the current scope
--> src/main.rs:4:19
|
4 | let z = y.parse::<i32>().unwrap();
| ^^^^^
Run Code Online (Sandbox Code Playgroud)
如何将a 134转换为整数?
下面的代码完全符合我的要求(Playground):
fn main() {
let …Run Code Online (Sandbox Code Playgroud) 如何获取从另一个函数struct返回的 a的值Result?下面举例。
#[derive(Debug)]
pub struct Keypair(ed25519_dalek::Keypair);
pub fn keypair_from_seed(seed: &[u8]) -> Result<Keypair, Box<dyn error::Error>> {
let dalek_keypair = ed25519_dalek::Keypair { secret, public };
Ok(Keypair(dalek_keypair))
}
Run Code Online (Sandbox Code Playgroud)
fn main(){
//here seed_bytes is mnemonics
let sk = keypair_from_seed(&seed_bytes);
//sk contains the secret key and public key, i want to extract it different secret key & public key
}
Run Code Online (Sandbox Code Playgroud) 从stdin读取输入会产生一个String,但是如何将其转换为整数?
use std::io;
fn main() {
println!("Type something");
let mut input = String::new();
io::stdin()
.read_line(&mut input)
.expect("Failed to read line");
println!("{}", input);
}
Run Code Online (Sandbox Code Playgroud) 显然,有些东西发生了变化,因此我无法从字符串中解析i64:
use std::from_str::FromStr;
let tree1: BTreeMap<String, String> = //....
let my_i64: i64 = from_str(tree1.get("key1").unwrap().as_slice()).unwrap();
Run Code Online (Sandbox Code Playgroud)
错误:
16:27 error: unresolved import `std::from_str::FromStr`. Could not find `from_str` in `std`
$ rustc -V
rustc 1.0.0-nightly (4be79d6ac 2015-01-23 16:08:14 +0000)
Run Code Online (Sandbox Code Playgroud) 我似乎无法在官方文档中挖掘任何内容。我可以看到有多种旧方法可以做到这一点(int::parse_bytes和f32::from_string),但这两种方法都已弃用。在 1.0 中执行此操作的方式是什么?
我不是想编写复杂的代码,我只是想了解这里发生了什么(或不是什么).我检查了其他问题,但他们都有复杂的情况,我认为这种情况到目前为止最简单.
我有以下代码:
let one_step: f32 = "4.0".parse().unwrap();
let extra_step: u32 = one_step as u32;
println!("{:?}", extra_step);
Run Code Online (Sandbox Code Playgroud)
我看到它的方式,我们有一个&str,我们解析它f32并解开它.然后我们将其转换f32为a u32.
为什么我不能这样做?实际上,这不是同一件事吗?
let single_step: u32 = "4.0".parse().unwrap() as u32;
println!("{:?}", single_step);
Run Code Online (Sandbox Code Playgroud)
如果我尝试运行此代码,我会收到此错误:
error[E0619]: the type of this value must be known in this context
--> src/main.rs:6:27
|
6 | let single_step: u32 = "4.0".parse().unwrap() as u32;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
看起来有些东西要求我们将操作分成两个块.
有没有办法“拉”出数据Option?我有一个 API 调用返回Some(HashMap). 我想使用HashMap它,就好像它不在里面一样Some并使用数据。
根据我所阅读的内容,它看起来Some(...)仅适用于匹配比较和一些内置函数。
从 crate 文档中提取的简单 API 调用:
use std::collections::HashMap;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let resp = reqwest::blocking::get("https://httpbin.org/ip")?
.json::<HashMap<String, String>>()?;
println!("{:#?}", resp.get("origin"));
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
结果:
Some("75.69.138.107")
Run Code Online (Sandbox Code Playgroud) 我刚开始尝试 Rust,所以我实现了 Book 的“猜谜游戏”的修改版本。每次我尝试输入数字时,程序都无法从字符串解析整数:
Guess the number!
Input your guess:
50
You guessed 50
(4 bytes)!
thread 'main' panicked at 'Wrong number format!: ParseIntError { kind: InvalidDigit }', src\libcore\result.rs:997:5
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
error: process didn't exit successfully: `target\release\experiment.exe` (exit code: 101)
Run Code Online (Sandbox Code Playgroud)
下面应用了代码。
我已经尝试过其他整数类型。
use std::io;
use rand::Rng;
fn main() {
println!("Guess the number!\nInput your guess:");
let mut guess = String::new();
let secnum = rand::thread_rng().gen_range(1,101);
'br: loop {
match io::stdin().read_line(&mut guess) {
Ok(okay) => …Run Code Online (Sandbox Code Playgroud) 我一直试图找到一种在 Rust 中读取变量的简单方法,但到目前为止还没有任何运气。Rust Book 中的所有示例都处理字符串 AFAIK,我找不到任何有关整数或浮点数的内容。
我是一个Rust新手并试图读取两个数字并计算他们的商:
use std::io;
enum Option<T> {
None,
Some(T),
}
fn safe_div(n: i32, d: i32) -> Option<i32> {
if d == 0 {
return None;
}
return Some(n / d);
}
fn main() {
println!("Please input your numerator.");
let mut numerator = String::new();
io::stdin()
.read_line(&mut numerator)
.expect("Failed to read line");
println!("Please input your denominator.");
let mut denominator = String::new();
io::stdin()
.read_line(&mut denominator)
.expect("Failed to read line");
match safe_div(numerator, denominator) {
None => println!("Can't divide by zero!"),
Some(v) => println!("Quotient is {}", …Run Code Online (Sandbox Code Playgroud)