【问题标题】:Converting decimal (ASCII) number into 128bit binary (hex) values将十进制 (ASCII) 数字转换为 128 位二进制 (hex) 值
【发布时间】:2019-07-19 21:18:23
【问题描述】:

我相信这应该不会那么难!我正在尝试使用 python 将一些存储为 ASCII 值(十进制)的 IPv6 地址转换为二进制(如果长度不是 128 位,则扩展为 128 位)并以小端格式保存到磁盘。

我正在享受各种乐趣(而不是)试图让它发挥作用。

我已经设法将 ASCII 值转换为十六进制,并将这些值打印到屏幕上,但是,如果我尝试使用 struct.pack 之类的东西,我只会收到如下错误:struct.error: argument out of范围。

来自组装背景,我真的很难与任何类型的选角。

提前致谢。

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    使用socket.inet_pton(doc)从IPv6字符串中获取128bit值:

    import socket
    
    packedIP = socket.inet_pton(socket.AF_INET6, '2001:db8::')
    
    print(packedIP)
    print('Length =', len(packedIP)*8)
    

    打印:

    b' \x01\r\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
    Length = 128
    

    编辑:

    import socket
    
    import ipaddress
    import struct
    
    ip = int('281470698520832')
    
    # to print IPv6 address
    ipv6 = ipaddress.IPv6Address(ip)
    print(str(ipv6))
    
    # method 1.
    packedIP = socket.inet_pton(socket.AF_INET6, str(ipv6))
    print(packedIP)
    
    # method 2.
    max_int64 = 0xFFFFFFFFFFFFFFFF
    packed = struct.pack('>QQ', (ip >> 64) & max_int64, ip & max_int64)
    print(packed)
    

    这会打印 IP 地址和字节数组:

    ::ffff:100:100
    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x01\x00\x01\x00'
    b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x01\x00\x01\x00'
    

    【讨论】:

    • 谢谢,但问题是它们已经是十进制格式了,像这样:"281470698520832","281470698521599","CN","China" "281470698521600","281470698522623","AU ","Australia" 我正在尝试将它们转换为原始的小端十六进制
    • 非常感谢,我现在有东西可以玩了!
    • 刚试过这个:42540488558116655331872044393019998208,输出似乎正在下降 \x02 值。我希望它是 \x01\x20 Not b' \x01\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
    • @colinr '42540488558116655331872044393019998208' 是地址2001:5::。它有字节表示b' \x01\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
    • 当然,但是 \x20 也应该出现在那个字节表示中,但它不存在
    猜你喜欢
    • 2019-11-29
    • 1970-01-01
    • 2012-01-06
    • 2012-03-04
    • 2015-06-27
    • 2012-11-14
    • 2019-02-03
    • 2013-12-26
    • 2019-01-23
    相关资源
    最近更新 更多