[英]Python pack IP string to bytes
我想實現我自己的struct.pack
特定函數來將IP字符串(即“192.168.0.1”)打包到32位打包值,而不使用內置方法的socket.inet_aton
。
我到目前為止:
ip = "192.168.0.1"
hex_list = map(hex, map(int, ip.split('.')))
# hex list now is : ['0xc0', '0xa8', '0x0', '0x01']
我的問題是:如何從['0xc0', '0xa8', '0x0', '0x01']
到'\\xc0\\xa8\\x00\\x01'
,(這是我從socket.inet_aton(ip)
得到的) socket.inet_aton(ip)
?
( 還有 - 如何在該字符串的中間有一個NUL( \\x00
)?我認為我對\\x
格式缺乏一些了解)
您可以根據需要使用字符串理解進行格式化:
ip = "192.168.0.1"
hex_list = map(int, ip.split('.'))
hex_string = ''.join(['\\x%02x' % x for x in hex_list])
或作為一個班輪:
hex_string = ''.join(['\\x%02x' % int(x) for x in ip.split('.')])
松散地關閉@ Stephen的答案,但返回一個包含實際字節的字符串,而不是帶有字面斜杠的字符串:
def pack_ip(ip):
num_list = map(int, ip.split('.'))
return bytearray(num_list)
src_ip = pack_ip('127.0.0.255')
print(repr(src_ip))
在Python 2和3中工作。返回b''
而不是字符串,匹配Python3的最佳實踐。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.