在文字字符串和文字值等上下文中使用时,"文字"这个词的含义是什么?
字面值和值之间有什么区别?
我正在写一个Rust程序,它读取I2C总线并保存数据.当我读了I2C总线,我得到这样的十六进制值0x11,0x22等等.
现在,我只能将其作为字符串处理并按原样保存.有没有办法可以解析为整数?它有内置功能吗?
我需要转换&[u8]为十六进制表示.例如[ A9, 45, FF, 00 ... ].
std::fmt::UpperHex切片没有实现特性(所以我不能使用std::fmt::format).Rust具有serialize::hex::ToHex特征,它转换&[u8]为十六进制字符串,但我需要一个具有单独字节的表示.
我可以UpperHex为&[u8]自己实现特质,但我不确定这会是多么规范.这样做最规范的方法是什么?
Rust有一组函数可以很容易地将十进制整数转换为十六进制字符串吗?我将字符串转换为整数没有问题,但我似乎无法弄清楚相反的情况.目前我所拥有的不起作用(可能有点令人厌恶)
编者注 - 此代码早于Rust 1.0,不再编译.
pub fn dec_to_hex_str(num: uint) -> String {
let mut result_string = String::from_str("");
let mut i = num;
while i / 16 > 0 {
result_string.push_str(String::from_char(1, from_digit(i / 16, 16).unwrap()).as_slice());
i = i / 16;
}
result_string.push_str(String::from_char(1, from_digit(255 - i * 16, 16).unwrap()).as_slice());
result_string
}
Run Code Online (Sandbox Code Playgroud)
我是在正确的轨道上,还是我在思考这一切?
我想在Rust中将一串字符(SHA256哈希)转换为十六进制:
extern crate crypto;
extern crate rustc_serialize;
use rustc_serialize::hex::ToHex;
use crypto::digest::Digest;
use crypto::sha2::Sha256;
fn gen_sha256(hashme: &str) -> String {
let mut sh = Sha256::new();
sh.input_str(hashme);
sh.result_str()
}
fn main() {
let hash = gen_sha256("example");
hash.to_hex()
}
Run Code Online (Sandbox Code Playgroud)
编译器说:
error[E0599]: no method named `to_hex` found for type `std::string::String` in the current scope
--> src/main.rs:18:10
|
18 | hash.to_hex()
| ^^^^^^
Run Code Online (Sandbox Code Playgroud)
我可以看到这是真的; 看起来它只是实现了[u8].
我是什么做的?在Rust中没有实现从字符串转换为十六进制的方法吗?
我的Cargo.toml依赖项:
[dependencies]
rust-crypto = "0.2.36"
rustc-serialize = "0.3.24"
Run Code Online (Sandbox Code Playgroud)
编辑我刚刚从rust-crypto库中发现字符串已经是十六进制格式.D'哦.
我有一个看起来像这样的字符串,"090A0B0C"我想将其转换为看起来像这样的切片[9, 10, 11, 12].我最好怎么做呢?
我不想将单个十六进制char元组转换为单个整数值.我想将包含多个十六进制char元组的字符串转换为多个整数值的切片.
将十六进制字符串转换为浮点数的最直接方法是什么?(不使用第 3 方板条箱)。
Rust 是否提供了一些与 Python 相同的功能? struct.unpack('!f', bytes.fromhex('41973333'))
我对文字和非文字之间的区别感到困惑(那些在堆上的,我不知道它们被称为什么).例如,以String类型为例:
我们已经看过字符串文字,其中字符串值被硬编码到我们的程序中.字符串文字很方便,但它们并不总是适合您想要使用文本的每种情况.一个原因是它们是不可改变的....
我不明白上面的内容,因为我们已经看到了这样一个例子:
let mut a = "a"; // this is String literal here, so sitting on the stack
a = "b";
println!("a is being changed to...{}", a); // this is the same String literal sitting on the stack?
Run Code Online (Sandbox Code Playgroud)
显然,文字在Rust中是可变的.两者之间有什么区别,除了文字进入堆栈这一事实,而非文字进入堆?
我试图理解为什么我不应该在我的代码中使用可变文字,考虑到堆栈比堆快.
// a is mutable literal
let mut a = "a";
a = "b";
// b is mutable 'non-literal'
let mut b = String::from("a");
b = String::from("b");
Run Code Online (Sandbox Code Playgroud)