gpt4 book ai didi

Python GetLogicalDrives 按位与

转载 作者:行者123 更新时间:2023-11-28 18:34:28 25 4
gpt4 key购买 nike

我对以下代码有一些疑问。

from win32 import win32file
drives = []
drivebits=win32file.GetLogicalDrives()
for d in range(1,26):

mask=1 << d
if drivebits & mask:
drname='%c:\\' % chr(ord('A')+d)
t=win32file.GetDriveType(drname)
if t == win32file.DRIVE_REMOVABLE:
drives.append(drname)
print(drives)

1-当您使用 win32 模块中的 GetLogicalDrives 时,它返回一个整数。有人可以解释为什么吗?

2-为什么循环的范围在 1 到 26 之间?

3-按位与的原因是什么?

谢谢

最佳答案

win32模块是 Win32 API 的真正低级包装器,因此通常您可以查看函数名称的 Windows 文档并获取所需信息。您可以找到 documentation for GetLogicalDrives here.

回答你的问题:

  1. 整数对应于可用驱动器:每个可用驱动器获得 1 位。因此,如果没有可用的驱动器,您将得到 0 ,假设一个 32 位整数)返回。如果每个驱动器都可用,您将得到 0b11111111111111111111111111 (二进制)

  2. 有 26 个字母,所以它循环遍历 26 个数字。 实际上,您发布的代码只是从 1 循环到 25,我认为这是一个错误。它应该只是 range(26) .

  3. 按位与是检查返回整数的各个位。请记住,整数的每个 都对应一个驱动器盘符。例如,假设您的 C、D 和 G 驱动器可用。您可以像这样可视化返回值,其中第一行是潜在驱动器,第二行是二进制返回值:

    ZYXWVUTSRQPONMLKJIHGFEDCBA # drive the bit corresponds to
    00000000000000000001001100 # returned value, in binary, if C, D, and G are available

要检查驱动器 A 是否可用,您需要检查最小位是否为 1。检查各个位的方法是使用按位与。要检查最小位,你会做drivebits & 1 , 要检查驱动器 B,您需要检查第二位:drievebits & (1 << 1) .要检查 C,您需要第三位:drivebits & (1 << 2) .等等。

一些示例返回:

如果您只有 C 盘可用,GetLogicalDrives会返回 0b100 (二进制),或 4 (十进制)。如果 C 和 D 可用,你会得到 0b1100 (二进制),或 12 (十进制)。

关于Python GetLogicalDrives 按位与,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33790734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com