如何从特定数字中获取值?

时间:2017-07-02 08:26:12

标签: c arduino microcontroller

我有一个十六进制值0x40BF00FF,我想从它得到这个值0xFF(最后两个数字),其他数字都是忽略的。我们如何用C语言编写代码

4 个答案:

答案 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 = bb&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

在对最后两个字符进行子字符串后,可以将它与第一个字符连接起来。