我在
中具有无符号的int值u_int_variable = 43981; // This is equal to ABCD in HEX
我可以使用
将其打印为在十六进制中的控制器printf("Value in Hex is %X", u_int_variable);
// Output : Value in Hex is ABCD
我如何转换和分开,以使
unsigned char uhex, lhex;
uhex = 0xAB; and lhex = 0xCD;
uhex = static_cast<unsigned char>(u_int_variable >> 8);
lhex = static_cast<unsigned char>(u_int_variable & 0xFF);
或,对于> 32位unsigned ints绝对安全:
uhex = static_cast<unsigned char>((u_int_variable >> 8) & 0xFF);
作为变体:
unsigned char uhex, lhex;
lhex = static_cast<unsigned char>( u_int_variable & 0xFF );
uhex = static_cast<unsigned char>( (u_int_variable >> 8) & 0xFF );
关于位操作的好第一文章在这里
我为您提供使用 bit-fields 和 unions ,解决方案将看起来像这样:
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();