<p>您的C输出与您提供的函数不匹配。这可能是因为您没有正确打印。此程序:</p>
<pre><code>#include <stdio.h>
#include <stdint.h>
uint64_t ror(uint64_t v, unsigned int bits)
{
return (v>>bits) | (v<<(8*sizeof(uint64_t)-bits));
}
int main(void)
{
printf("%llx\n", ror(0x0123456789abcdef, 4));
printf("%llx\n", ror(0x0123456789abcdef, 8));
printf("%llx\n", ror(0x0123456789abcdef, 12));
printf("%llx\n", ror(0x0123456789abcdef, 16));
return 0;
}
</code></pre>
<p>产生以下输出:</p>
<pre>
f0123456789abcde
ef0123456789abcd
def0123456789abc
cdef0123456789ab
</pre>
<p>要在Python中生成ror函数,请参阅这篇优秀的文章:<a href="http://www.falatic.com/index.php/108/python-and-bitwise-rotation" rel="noreferrer">http://www.falatic.com/index.php/108/python-and-bitwise-rotation</a></p>
<p>Python 2代码产生的输出与上面的C程序相同:</p>
<pre><code>ror = lambda val, r_bits, max_bits: \
((val & (2**max_bits-1)) >> r_bits%max_bits) | \
(val << (max_bits-(r_bits%max_bits)) & (2**max_bits-1))
print "%x" % ror(0x0123456789abcdef, 4, 64)
print "%x" % ror(0x0123456789abcdef, 8, 64)
print "%x" % ror(0x0123456789abcdef, 12, 64)
print "%x" % ror(0x0123456789abcdef, 16, 64)
</code></pre>