2024-10-01 07:16:54 发布
网友
给出以下代码:
import ctypes ip="192.168.1.1" thisdll = ctypes.cdll['aDLL'] thisdll.functionThatExpectsAnIP(ip)
我如何才能正确地为一个期望它是一个cuulong数据类型的DLL打包它?在
我试过使用:
但是,c_ulong()方法返回一个错误,因为它需要一个整数。在
c_ulong()
有没有一种方法可以使用struct.pack来实现这一点?在
struct.pack
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)
inet_aton返回一个字节字符串。这曾经是C语言接口的通用语言。在
下面是如何将这些字节解压为更有用的值。在
此未打包的值可用于ctypes。十六进制的东西只是告诉你,解压值看起来很像一个IP地址。在
也许有更好的方法,但这是可行的:
首先声明:这只是一个有根据的猜测。在
ip地址通常用四个字节来表示,即。xxx.xxx.xxx.xxx,但实际上是一个无符号long。所以你应该把192.168.1.1的表示转换成一个未识别的整数。在
相关问题 更多 >
编程相关推荐