Python GetLogicalDrives按位与

2024-04-20 15:33:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我对下面的代码有一些问题。在

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模块使用GetLogicalDrive时,它返回一个整数。可以有人解释原因吗?在

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

3-位和的原因是什么?在

谢谢你


Tags: 代码infromimportforifrange原因
1条回答
网友
1楼 · 发布于 2024-04-20 15:33:56

win32模块是一个非常低级的win32api包装器,因此通常您可以查看函数名的Windows文档并获得所需的信息。你可以找到documentation for GetLogicalDrives here.

回答您的问题:

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

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

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

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

要检查驱动器A是否可用,您需要检查最小位是否为1。检查单个位的方法是使用逐位and。要检查最小位,您需要drivebits & 1,要检查驱动器B,您需要检查第二个位:drievebits & (1 << 1)。要检查C,您需要第三个位:drivebits & (1 << 2)。等等。在

一些示例返回:

如果只有驱动器C可用,GetLogicalDrives将返回0b100(二进制),或4(十进制)。如果C和D可用,您将得到0b1100(二进制),或12(十进制)。在

相关问题 更多 >