如何在 Python 中进行位移以操作文件系统八进制
How to bitshift in Python to manipulate a filesystem octal
我有一个八进制表示 Linux 文件权限。
当前权限为 I.E 0o640
,我想将组位设置为 6(因此 0o660
)。我看到我可以在第 n 位 here 设置位但是我得到的结果很奇怪,我猜这是因为八进制表示。
我试过:
perm = 0o640
# Set the bit in the 2nd place (index 1) to 6.
new_perm = perm | (6<<1)
# new_perm is now 0o634 (wanted 0o660).
我猜我做错了什么...
我还想知道在 Python 使用文件权限时使用八进制而不是常规整数有什么好处。
谢谢!
<<
将数字移动一位。对于您想要的答案,您应该将 0o600
移动 3
.
perm = 0o600
new_perm = (perm & 0o707) | (6<<3)
print(new_perm == 0o660) # True
根据评论,我们应该首先将我们想要的位设为零,然后使用 |
。
(perm & 0o707)
这部分代码实现了这一点。
我有一个八进制表示 Linux 文件权限。
当前权限为 I.E 0o640
,我想将组位设置为 6(因此 0o660
)。我看到我可以在第 n 位 here 设置位但是我得到的结果很奇怪,我猜这是因为八进制表示。
我试过:
perm = 0o640
# Set the bit in the 2nd place (index 1) to 6.
new_perm = perm | (6<<1)
# new_perm is now 0o634 (wanted 0o660).
我猜我做错了什么...
我还想知道在 Python 使用文件权限时使用八进制而不是常规整数有什么好处。
谢谢!
<<
将数字移动一位。对于您想要的答案,您应该将 0o600
移动 3
.
perm = 0o600
new_perm = (perm & 0o707) | (6<<3)
print(new_perm == 0o660) # True
根据评论,我们应该首先将我们想要的位设为零,然后使用 |
。
(perm & 0o707)
这部分代码实现了这一点。