这个C函数在做什么?

时间:2016-11-30 12:59:52

标签: c function

我知道它会接受一个数字并返回一个角色。我理解每行代码的作用,但我无法用有意义的方式真正表达它的整体行为。有什么想法吗?

int function(uint64_t P1) {
    uint64_t L1 = P1;
    uint32_t L2 = 1;

    while (L1 > 15) {
        L2 = (uint64_t)L2 << 4;
        L1 = L1 >> 4;
    }
    uint32_t L3 = 0;

    while (L2 != 0) {
        L1 = P1;
        uint32_t L4 = 0;

        L4 = L1 % L2;
        uint64_t L5 = (uint64_t)L4;
        sub_function(L1 / L2);
        L3++;
        P1 = L5;
        L2 = (uint64_t)L2 >> 4;
    }
    L1 = L3;

    return L1;
}

void sub_function(uint64_t P1) {
    if (P1 <= 9) {
        printf("%c", P1 + 48);
    } else {
        printf("%c", P1 + 55);
    }
}

1 个答案:

答案 0 :(得分:1)

此代码接受十进制值并打印十六进制表示。

Try it out yourself

在C中,我们可以使用%x%X)格式说明符标记printf为我们执行此操作:

printf("%X", 16); // 10
printf("\n");
printf("%X", 42); // 2A

如果您使用的是C ++编译器,我们可以使用iostream上的std::hex流操作标志来实现相同的结果:

std::cout << std::hex << 16 << std::endl; // 10
std::cout << std::hex << 42 << std::endl; // 2a