簡體   English   中英

Python IP 到整數轉換未按預期工作

[英]Python IP to integer conversion not working as expected

我正在使用此處提供的答案將字符串 IP 轉換為整數。 但我沒有得到預期的輸出。 具體來說,方法是

>>> ipstr = '1.2.3.4'
>>> parts = ipstr.split('.')
>>> (int(parts[0]) << 24) + (int(parts[1]) << 16) + \
          (int(parts[2]) << 8) + int(parts[3])

但是當我提供值172.31.22.98我得到2887718498回來。 但是,我希望看到 Google 的 Guava 庫提供的值-1407248798 https://google.github.io/guava/releases/20.0/api/docs/com/google/common/net/InetAddresses.html#fromInteger-int ——

此外,我已經驗證服務提供了預期的輸出,但上述 StackOverflow 答案提供的所有答案都返回2887718498

請注意,我不能使用任何第三方庫。 所以我幾乎只能使用手寫代碼(沒有導入)

更好的方法是使用庫方法

>>> from socket import inet_aton
>>> int.from_bytes(inet_aton('172.31.22.98'), byteorder="big")
2887718498

這仍然是你上面的結果

這是將其視為簽名整數的一種方法

>>> from ctypes import c_long
>>> c_long(2887718498)
c_long(-1407248798)

在沒有導入的情況下做到這一點(但為什么?以上都是第一方 CPython)

>>> x = 2887718498
>>> if x >= (1<<31): x-= (1<<32)
>>> x
-1407248798

在嘗試與 OP 相同的操作時發現了這篇文章。 為我簡單的頭腦開發以下內容,並讓某人從中受益。

baseIP = '192.168.1.0'
baseIPFirstOctet = (int((baseIP).split('.')[0]))
baseIPSecondOctet = (int((baseIP).split('.')[1]))
baseIPThirdOctet = (int((baseIP).split('.')[2]))
baseIPFourthOctet = (int((baseIP).split('.')[3]))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM