データのバイトが 'char'メンバ変数に格納されています。おそらく、代わりに 'unsigned char'として格納する必要がありますが、変更することはできません。私は 'int'変数を通してそれを取得する必要がありますが、符号ビットを伝播する必要はありません。C++での符号ビット伝播のないcharのintへの変換
私のソリューションは、この(UINTとUCHARが明白なタイプです)した
void Foo::get_data(int *val)
{
if(val)
*val = (int)(UINT)(UCHAR)m_data; // 'm_data' is type 'char'
}
これは私には最適なソリューションを見えました。キャストの代わりに
を使用できますが、これは読みやすいとは思われません。どちらの方が良いのでしょうか?今表現(UCHAR)m_data
は、符号なしの型でもない符号ビットが伝播されますがありますとおり
あなたは最も頻繁に使用されています(おそらく最も明白です): 'unsigned char'にキャストし、' int'に直接結果を保存してください。 – WhozCraig
@WhozCraig:ああ、確かに - それは魅力的です。 +1。答えに変換し、私は受け入れます。 – MPW
なぜabs()を使用しないのですか?それは間違いなくそれを行う最もクリーンな方法です。また、良いコンパイラを使用している場合、可能な限り効率的な方法で実行される可能性があります。 – patatahooligan