2015-05-29 15 views

Trả lời

13

Chắc chắn, mặc dù nó là một built-in hành as:

let c: char = 97 as char; 
println!("{}", c); // prints "a" 

Lưu ý rằng as điều hành chỉ hoạt động cho u8 số, cái gì khác sẽ gây ra một lỗi biên dịch:

let c: char = 97u32 as char; // error: only `u8` can be cast as `char`, not `u32` 

Nếu bạn cần một chuỗi (để mô phỏng đầy đủ chức năng Python), sử dụng to_string():

let s: String = (97 as char).to_string(); 

Ngoài ra còn có các chức năng char::from_u32:

use std::char; 
let c: Option<char> = char::from_u32(97); 

Nó trả về một Option<char> bởi vì không phải tất cả các số là một điểm mã Unicode hợp lệ - những con số chỉ có giá trị là 0x0000 để 0xD7FF và từ 0xE000 để 0x10FFFF. Chức năng này được áp dụng cho một tập hợp các giá trị lớn hơn as char và có thể chuyển đổi các số lớn hơn một byte, cung cấp cho bạn quyền truy cập vào toàn bộ phạm vi các điểm mã Unicode.

Tôi đã biên soạn một set of examples on the Playground.

+0

Đủ thú vị 'cho c4 = 0xd801 làm char; println! ("{:?}", c4); 'hoạt động với cảnh báo. –

+2

Nó hoạt động không chính xác - nó diễn giải '0xd801' như một' u8', gói giá trị quanh '1u8' và chuyển đổi thành' char'. [Ở đây] (http://is.gd/mI5wme) là một cuộc biểu tình. –

+0

Phải, tôi chỉ có nghĩa là nó phát ra một cảnh báo và trả về một giá trị. –

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