如何使用按位运算符将 32 位十进制转换为 C 中的十六进制?

how to use bitwise operators to covert 32 bit decimal to hexadecimal in c?

我应该编写一个将 32 位十进制转换为十六进制的函数。但是我的函数一直输出零而不是正确的十六进制。我不知道我做错了什么。下面是我的函数的代码。

输入:66

输出应该是什么:42

我的代码输出:0

uint32_t packed_bcd(uint32_t value) {
    uint32_t ones = 15;
    uint32_t mask = (ones >> 28);

    uint32_t numbers[8];
    numbers[0] = value & mask;

    for(int i = 1; i <= 7; i++) {
        uint32_t mask_temp = (mask << (4 * i));
        numbers[i] = mask_temp & value;
    }

    for(int i = 7; i >= 0; i--) {
        numbers[i] = numbers[i] * pow(10, i);
    }

    int sum = 0;

    for(int i = 0; i < 8; i++) {
        sum = sum + numbers[i];
    }

    return sum;
}

BCD 不是十六进制或普通二进制。

uint32_t bcdtobin(uint32_t bcd)
{
    uint32_t result = 0;
    uint32_t mask = 1;

    while(bcd)
    {
        result += (bcd & 0x0f) * mask;
        bcd >>= 4;
        mask *= 10;
    }
    return result;
}

uint32_t bintobcd(uint32_t bin)
{
    uint32_t result = 0;
    size_t remaining = 32;

    if(bin <= 99999999)
    {
        while(bin)
        {
            result >>= 4;
            result |= (bin % 10) << 28;
            bin /= 10;
            remaining -= 4;
        }
        result >>= remaining;
    }
    return result;
}

使用您的示例编号:

int main(void)
{
    printf("%d\n", bintobcd(42));
    printf("%d\n", bcdtobin(66));
}

https://godbolt.org/z/9K48GEosv