我有一个十六进制值0x40BF00FF,我想从它得到这个值0xFF(最后两个数字),其他数字都是忽略的。我们如何用C语言编写代码
答案 0 :(得分:2)
<强>解决方案强>
使用0x000000FF的位掩码:
int result = 0x000000FF & 0x40BF00FF;
完整代码示例
int input = 0x40BF00FF; //input example
int output = 0x000000FF & input;
printf("%04x", output); //prints result
<强>结果强>
00ff
答案 1 :(得分:1)
uint8_t get8bits(uint32_t value, int byteNumber)
{
uint8_t bitShift = byteNumber * 8;
uint32_t mask = 0xfful << byteShift;
return (value & mask) >> bitShift;
}
答案 2 :(得分:0)
如果您有十六进制值(不是字符串)。这个小程序就是一个很好的例子:
此方法提取单个半字节。然后加入他们。
我们可以通过将模数乘以16得到最低有效4位。 然后我们可以做左移4次(除以16)。然后提取下一个最不重要的4位。
现在我们得到了8 LSB。现在我们只是附加它们。
#include <stdio.h>
int main()
{
unsigned int x = 0x40BF00FF;
// Extracting the first 4 least significant bits.
unsigned int one = x % 16;
// Extracting the next 4 least significant bits.
unsigned int two = (x >> 4) % 16;
// Appending the bits and printing the result.
printf ("%x\n", (two << 4) + one);
return 0;
}
OR
你可以使用比特的力量!
这里,输入存储在x中。
我带了一个面具0xFF
。
我执行按位和操作。
现在,我们知道
b&1 = b
和b&0 = 0
。
我们可以使用此属性仅将低8位提取为1
,将其他设置为0
。
并执行按位和(&
)。
#include <stdio.h>
int main()
{
unsigned int x = 0x40BF00FF;
// The mask.
unsigned int mask = 0xFF;
// Applying bitwise and
printf ("%x\n", x & mask);
return 0;
}
答案 3 :(得分:-1)
这取决于您使用的语言版本。但是,您可以阅读here
在对最后两个字符进行子字符串后,可以将它与第一个字符连接起来。