ビッグエンディアンのプロセッサでテストしていませんが、これは常に最下位バイトを与えますか?最下位バイトの取得
int i = 12345678;
unsigned char c = static_cast<unsigned char>(i);
ビッグエンディアンのプロセッサでテストしていませんが、これは常に最下位バイトを与えますか?最下位バイトの取得
int i = 12345678;
unsigned char c = static_cast<unsigned char>(i);
はい、これは常に最下位バイトを与えます。 C++仕様(§ 4.7/2)は、変換を狭めると、モジュロ2 n(nはターゲットタイプのビット数)の元の整数に一致する最小値を返すことによって、常に最上位バイトを破棄することが保証されます。
つまり、unsigned char
が1バイトであるという保証はありません。保証されるのは、sizeof(char) == 1
です。しかし、文字を保持できる最小のメモリ単位としてバイトを扱う場合、これはうまくいくはずです。
次のこともできませんか?
int i = 12345678;
unsigned char c = (i % 256);
または
int i = 12345678;
unsigned char c = (i & 255);
(メタ)あなたは、私はそれはあなたがそれを行うより良いことだと思うので、私はそれを再タグ付けしませんC.として質問をマークしてはならないstatic_castを使用する場合は(あなたがタグを学びます-etiquette :-)) – xanatos