我有一些关于以下代码的问题。
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-当您使用GetLogicalDrives from win32模块时,它会返回一个integer.Can,有人解释了原因吗?
2-为什么环路的范围在1到26之间?
3-按位计算的原因是什么?
谢谢
发布于 2015-11-18 21:36:46
win32模块是Win32 API的底层包装器,所以通常您可以查看Win32函数名的文档并获取所需的信息。你可以找到这里是GetLogicalDrives的文档。
回答你的问题:
0,假设是32位整数)。如果每个驱动器都可用,您将得到0b11111111111111111111111111 (二进制文件)。range(26)**.** 要检查驱动器A是否可用,您需要检查最小位为1。检查单个位的方式是按位和。要检查最小位,您需要执行drivebits & 1,要检查驱动器B,需要检查第二个位:drievebits & (1 << 1)。要检查C,您需要第三位:drivebits & (1 << 2)。诸若此类。
一些示例返回:
如果只有可用的驱动器C,GetLogicalDrives将返回0b100 (二进制)或4 (十进制)。如果C和D可用,您将得到0b1100 (二进制)或12 (十进制)。
https://stackoverflow.com/questions/33790734
复制相似问题