编辑注:此代码示例来自 Rust 1.0 之前的版本,不是有效的 Rust 1.0 代码,但答案仍包含有价值的信息。
我想将一个字符串字面量传递给 Windows API。许多 Windows 函数使用 UTF-16 作为字符串编码,而 Rust 的本地字符串是 UTF-8。
我知道 Rust 有utf16_units()来生成一个UTF-16字符迭代器,但我不知道如何使用该函数生成以零结尾的UTF-16字符串。
我像这样生成UTF-16字符串,但我相信有更好的方法来生成它:
我想将一个字符串字面量传递给 Windows API。许多 Windows 函数使用 UTF-16 作为字符串编码,而 Rust 的本地字符串是 UTF-8。
我知道 Rust 有utf16_units()来生成一个UTF-16字符迭代器,但我不知道如何使用该函数生成以零结尾的UTF-16字符串。
我像这样生成UTF-16字符串,但我相信有更好的方法来生成它:
extern "system" {
pub fn MessageBoxW(hWnd: int, lpText: *const u16, lpCaption: *const u16, uType: uint) -> int;
}
pub fn main() {
let s1 = [
'H' as u16, 'e' as u16, 'l' as u16, 'l' as u16, 'o' as u16, 0 as u16,
];
unsafe {
MessageBoxW(0, s1.as_ptr(), 0 as *const u16, 0);
}
}
collect()
的类型参数应该是目标集合类型,而不是元素类型。collect::<Vec<u16>>()
也可以工作。 - Vladimir Matveev