给出以下代码:
import ctypes
ip="192.168.1.1"
thisdll = ctypes.cdll['aDLL']
thisdll.functionThatExpectsAnIP(ip)
我怎样才能正确地将它打包为一个期望它作为 c_ulong 数据类型的 DLL?
我尝试过使用:
ip_netFrmt = socket.inet_aton(ip)
ip_netFrmt_c = ctypes.c_ulong(ip_netFrmt)
但是,那c_ulong()
方法返回错误,因为它需要一个整数。
有没有办法使用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 地址。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)