2015-06-06 11 views
8

Tôi hiện đang xây dựng một thông dịch viên đơn giản cho this language để thực hành. Vấn đề duy nhất còn lại để khắc phục là đọc một byte đơn như một ký tự từ đầu vào của người dùng. Tôi có đoạn code sau cho đến nay, nhưng tôi cần một cách để biến String rằng dòng thứ hai làm thành một u8 hay số nguyên khác mà tôi có thể đúc:Cách đọc một ký tự đơn từ đầu vào là u8?

let input = String::new() 
let string = std::io::stdin().read_line(&mut input).ok().expect("Failed to read line"); 
let bytes = string.chars().nth(0) // Turn this to byte? 

Giá trị trong byte phải là một u8 mà tôi có thể truyền tới một số i32 để sử dụng ở nơi khác. Có lẽ có một cách đơn giản hơn để làm điều này, nếu không tôi sẽ sử dụng bất kỳ giải pháp nào hoạt động.

Trả lời

9

Reading chỉ là một byte và đúc nó để i32:

use std::io::Read; 

let input: Option<i32> = std::io::stdin() 
    .bytes() 
    .next() 
    .and_then(|result| result.ok()) 
    .map(|byte| byte as i32); 

println!("{:?}", input); 
+0

Cảm ơn, tôi đã sử dụng .bytes() trên chuỗi và có vấn đề, nhưng nó quay ra tôi đã sử dụng nó sai. Điều này làm việc cho tôi, tôi chỉ phải cởi nó ra. – pengowen123

2

Đầu tiên, làm cho đầu vào của bạn có thể thay đổi, sau đó sử dụng bytes() thay vì chars().

let mut input = String::new(); 
let string = std::io::stdin().read_line(&mut input).ok().expect("Failed to read line"); 
let bytes = input.bytes().nth(0).expect("no byte read"); 

Xin lưu ý rằng chuỗi Rust là một chuỗi các điểm mã UTF-8, không nhất thiết phải là byte. Tùy thuộc vào những gì bạn đang cố gắng đạt được, sử dụng một char có thể là lựa chọn tốt hơn.

+0

tôi đã cố gắng này, nhưng nó nói nó cần một i32. Tôi đã sử dụng .collect() trên .bytes() nhưng vẫn không có may mắn. – pengowen123

+0

Tôi nghĩ rằng nó thành ngữ hơn để sử dụng 'next()' thay vì 'nth (0)'. Mặc dù chúng chính xác giống nhau. –

+0

@VladimirMatveev Đồng ý, tôi đã thay đổi mã được đưa ra trong câu trả lời chỉ đủ để làm cho nó hoạt động (Và tôi quên 'như i32' cast. Damn). – llogiq

Các vấn đề liên quan