あなたは質問をされています
私は8ビットの値に32ビットの数に合わせてどうすればよいですか?
右のエンコーディングのビット?
私が捨てたものはどうですか?
ルストchar
すべてのUnicodeスカラ値をエンコードできます。 このコードのためのあなたの希望の行動は何ですか:
let c = '' as libc::c_char;
それは価値-87
、非ASCII値を作成することはおそらくありません! -17
であるか、このあまり愚かそしておそらく、より現実的な変種、:Cコードは、文字によってどういう意味:
let c = 'ï' as libc::c_char;
その後、聞いていますか? Cコードは文字列とはどのようなエンコードをしていますか? Cコードは非ASCIIテキストをどのように扱いますか?
最も安全なものは値がASCIIの範囲内であることを主張することがあります
let c = 'ï';
let v = c as u32;
assert!(v <= 127, "Invalid C character value");
let v = v as libc::c_char;
代わりの主張する、あなたはまた、値が範囲外であったことを示すResult
タイプを返すことができます。
私の代わりにchar
のc_char
を受け取るために私の機能(グルー関数を呼び出します1)を変更する必要がありますか?
それは問題をスタックの上にさらに押し上げるかもしれません。 every発信者はc_char
の作成方法を決定し、128〜255の値を心配しなければなりません。コードの意味がASCII文字でなければならない場合、はあなたのタイプでコード化します。具体的には、ascii crateのようなものを使用できます。
いずれの場合でも、失敗の可能性を他の人のコードにプッシュすると、発信者をより不満にさせる可能性があります。
アサートを正しく処理するにはどうすればいいですか?または、 'char'の代わりに' c_char'を受け取る関数(グルー関数を呼び出す関数)を変更する必要がありますか? – Sassa
詳細で非常に洞察力のある答えに感謝します! – Sassa