如何将unsigned long int(32位)拆分为8个半字节?

Ast*_*lus 2 c++ binary bit-manipulation bitwise-operators

如果我的问题令人困惑,我很抱歉,但这是我想要做的例子,

让我说我有一个无符号long int = 1265985549二进制我可以把它写成01001011011101010110100000001101

现在我想把这个二进制32位数分成4位,就像这样,分别在这4位上工作

0100 1011 0111 0101 0110 1000 0000 1101

任何帮助,将不胜感激.

das*_*ght 6

您可以k使用位操作获得位置的4位半字节,如下所示:

uint32_t nibble(uint32_t val, int k) {
    return (val >> (4*k)) & 0x0F;
}
Run Code Online (Sandbox Code Playgroud)

现在你可以在循环中获得单个半字节,如下所示:

uint32_t val = 1265985549;
for (int k = 0; k != 8 ; k++) {
    uint32_t n = nibble(val, k);
    cout << n << endl;
}
Run Code Online (Sandbox Code Playgroud)

在ideone上演示.