小さなプログラムを実現するためにRustプログラミングになっています。文字列変換では少し失われています。私のプログラムでVec <u16>またはVec <WCHAR>を&strに変換する
次のように、私はベクトルを持っている:
let mut name: Vec<winnt::WCHAR> = Vec::new();
WCHAR
は、私のWindowsマシン上u16
と同じです。
私はVec<u16>
を、データで埋め込むCの関数(ポインタ)に引き渡します。私はその後、ベクトルに含まれる文字列を&str
に変換する必要があります。しかし、私が何をしようとしても、私はこの変換を働かせることはできません。
私が働いて得ることができた唯一の事はWideString
に変換することです:
widestr = unsafe { WideCString::from_ptr_str(name.as_ptr()) };
しかし、これは間違った方向へのステップであると思われます。
Vec<u16>
を&str
に変換する最善の方法は、ベクトルが有効なヌル終了文字列を保持していることを前提としています。
私を助けてくれてありがとう、私は明らかに完全に失われていて、何とか両方のタイプのエンコーディングが同一であると仮定しました。この文脈では、この変換のために別のStringオブジェクト(実際にはオブジェクトを錆びているオブジェクトと呼んでいますか?)を使用するのは意味があります。 – Norbert
@Norbert:物事をオブジェクトにするかどうかについて熟考している人はいないと思います。誰もがその言葉を理解するだけで十分です:) –
@Norbertええ、私はあなたが "オブジェクト"と呼ぶものに依存していると思います。あなたがデータの集まりと関連するメソッドを意味するならば、そうです、それはオブジェクトです。私は通常、単に "クラス"の代わりに "タイプ"と言うだけで、 "タイプのインスタンス"と言うと思います。私は自分自身が "オブジェクト"を頻繁に言う必要があることを発見していない。私は誰もがうまく理解していると思う。 – Shepmaster