在一些情况下,我们会在别人的代码中看到& 0xff
,刚开始我也不知道为什么会有这个用法,查了一些资料后,学习如下。
首先,&表示按位与,只有两个位同时为1才能得到1;0x代表16进制数,0xff表示二进制1111 1111,8个位占一个字节。
1. & 0xff的作用——保留低8位
例如,有个数字 0x1234,如果只想将低8位写入到内存中,就需要用0x1234 & 0xff
。
0x1234 表示成二进制是 0001 0010 0011 0100
,0xff 表示成二进制是 1111 1111
,高位补0就是 0000 0000 1111 1111
。
因为1&0 =0, 1&1 =1
,所以0x1234 & 0xff
运算后,最低8位不会发生变化。
2. 常用十六进制数的处理
在C 中,处理十六进制数可以使用一些内置的功能和方法。
字符串转换为十六进制数:
使用 std::stoi
函数将字符串转换为十六进制数。
std::string hexString = "1A";
int decimal = std::stoi(hexString, nullptr, 16); // stoi的第三个参数16表示用16进制表示,8进制写8就行
十进制数转换为十六进制字符串:
使用 std::stringstream
类和 std::hex
输出格式来将十进制数转换为十六进制字符串。
int decimal = 26;
std::stringstream ss;
ss << std::hex << decimal; // 输出格式用hex表示,8进制用oct
std::string hexString = ss.str(); // 获取转换后的16进制字符串
十六进制数的位操作:
使用位运算符(例如按位与、按位或、按位异或)对十六进制数进行位操作。
代码语言:javascript复制int hexA = 0x0F; // 十六进制数 0x0F
int hexB = 0x32; // 十六进制数 0x32
int resultAnd = hexA & hexB; // 按位与
int resultOr = hexA | hexB; // 按位或
int resultXor = hexA ^ hexB; // 按位异或
3. 常用十进制数的处理
字符串转换为十进制数:
使用 std::stoi
函数将字符串转换为十进制数。
std::string decimalString = "42";
int decimal = std::stoi(decimalString);
十进制数转换为字符串:
使用 std::to_string
函数将十进制数转换为字符串。
int decimal = 42;
std::string decimalString = std::to_string(decimal);
十进制数的数学运算:
常用的数学运算,这里就不多说了。
另外,二进制转十进制,可以使用 std::bitset
类和 std::to_string
函数将十进制数转换为二进制字符串。
int decimal = 42;
std::bitset<32> binary(decimal);
std::string binaryString = binary.to_string();
以上。