標準によると、char
署名されているかどうかは実装定義です。これは私にいくつかの問題を引き起こしました。次にいくつかの例を示します。
1) 最上位ビットのテスト。が署名されている場合char
、単純に値を と比較できます0
。署名されていない場合は、代わりに値を比較します128
。2 つの単純な方法はどちらも一般的ではなく、両方のケースに適用されます。移植可能なコードを書くためには、ビットを直接操作しなければならないようです。
2) 値の割り当て。値にビット パターンを書き込む必要がある場合がありchar
ます。が符号なしの場合char
、これは 16 進表記を使用して簡単に実行できますchar c = 0xff
。char
ただし、署名されている場合、この方法は適用されません。例を挙げてみましょうchar c = 0xff
。0xff
署名済みが保持できる最大値を超えていますchar
。このような場合、標準では、 の結果の値c
は実装定義であると規定されています。
では、この 2 つの問題について何か良いアイデアをお持ちの方はいらっしゃいますか? 2つ目に関してはchar c = '\xff'
、 signed と unsigned の両方でOKなのか気になりchar
ます。
注:明示的なビット パターンを文字に書き込む必要がある場合があります。http://en.cppreference.com/w/cpp/string/multibyte/mbsrtowcsの例を参照してください。