3

unsigned int 値があります

u_int_variable = 43981; // This is equal to ABCD in HEX

ABCD を使用して、これを 16 進数でコンソールに出力できます。

printf("Value in Hex is %X", u_int_variable);

// Output : Value in Hex is ABCD

これを次のように変換して分離するにはどうすればよいですか

unsigned char uhex, lhex;

uhex = 0xAB; and lhex = 0xCD;
4

3 に答える 3

2
uhex = static_cast<unsigned char>(u_int_variable >> 8);
lhex = static_cast<unsigned char>(u_int_variable & 0xFF);

または、32 ビットを超える unsigned int に対して完全に安全にするには、次のようにします。

uhex = static_cast<unsigned char>((u_int_variable >> 8) & 0xFF);
于 2012-11-09T09:36:10.790 に答える
1

ビットフィールドユニオンを使用することをお勧めします。ソリューションは次のようになります。

struct hex
    {
        unsigned int lhex : 8; // upper and lower part alignement are system dependent
        unsigned int uhex : 8;
    };

    union number
    {
        number(int val): m_val(val){};
        void lhex(void) {printf("lhex %X", this->num.lhex);};
        void uhex(void) {printf("uhex %X", this->num.uhex);};
        int m_val;
        hex num;
    };

    number n(43981);
    n.lhex();
    n.uhex();
于 2012-11-09T09:49:13.427 に答える
1

バリアントとして:

unsigned char uhex, lhex;
lhex = static_cast<unsigned char>( u_int_variable & 0xFF );
uhex = static_cast<unsigned char>( (u_int_variable >> 8) & 0xFF );

ビット単位の操作に関する最初の深さの良い記事はこちら

于 2012-11-09T09:36:19.380 に答える