Python:将ip地址打包为ctype.c\u ulong()以便与DLL一起使用

2024-10-01 07:16:54 发布

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

给出以下代码:

import ctypes    
ip="192.168.1.1"
thisdll = ctypes.cdll['aDLL']
thisdll.functionThatExpectsAnIP(ip)

我如何才能正确地为一个期望它是一个cuulong数据类型的DLL打包它?在

我试过使用:

^{pr2}$

但是,c_ulong()方法返回一个错误,因为它需要一个整数。在

有没有一种方法可以使用struct.pack来实现这一点?在


Tags: 方法代码importip错误ctypesdll数据类型
3条回答

inet_aton返回一个字节字符串。这曾经是C语言接口的通用语言。在

下面是如何将这些字节解压为更有用的值。在

>>> import socket
>>> packed_n= socket.inet_aton("128.0.0.1")
>>> import struct
>>> struct.unpack( "!L", packed_n )
(2147483649L,)
>>> hex(_[0])
'0x80000001L'

此未打包的值可用于ctypes。十六进制的东西只是告诉你,解压值看起来很像一个IP地址。在

也许有更好的方法,但这是可行的:

>>> ip = "192.168.1.1"
>>> struct.unpack('>I', struct.pack('BBBB', *map(int, ip.split('.'))))[0]
3232235777L

首先声明:这只是一个有根据的猜测。在

ip地址通常用四个字节来表示,即。xxx.xxx.xxx.xxx,但实际上是一个无符号long。所以你应该把192.168.1.1的表示转换成一个未识别的整数。在

ip="192.168.1.1"
ip_long = reduce(lambda x,y:x*256+int(y), ip.split('.'), 0)

相关问题 更多 >