【C++】基础:& 0xff 的用法及常用十六进制数处理

2024-07-24 14:50:53 浏览数 (2)

在一些情况下,我们会在别人的代码中看到& 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 函数将字符串转换为十六进制数。

代码语言:javascript复制
std::string hexString = "1A";
int decimal = std::stoi(hexString, nullptr, 16);  // stoi的第三个参数16表示用16进制表示,8进制写8就行
十进制数转换为十六进制字符串:

使用 std::stringstream 类和 std::hex 输出格式来将十进制数转换为十六进制字符串。

代码语言:javascript复制
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 函数将字符串转换为十进制数。

代码语言:javascript复制
std::string decimalString = "42";
int decimal = std::stoi(decimalString);
十进制数转换为字符串:

使用 std::to_string 函数将十进制数转换为字符串。

代码语言:javascript复制
int decimal = 42;
std::string decimalString = std::to_string(decimal);
十进制数的数学运算:

常用的数学运算,这里就不多说了。

另外,二进制转十进制,可以使用 std::bitset 类和 std::to_string 函数将十进制数转换为二进制字符串。

代码语言:javascript复制
int decimal = 42;
std::bitset<32> binary(decimal);
std::string binaryString = binary.to_string();

以上。

0 人点赞