Golang IPv4 字符串與整數(shù)互轉(zhuǎn)方式
1. 字符串轉(zhuǎn)整數(shù)
第一步:
- 是使用 net.ParseIP 判斷字符串是否是合法的 IPv4 地址。
- 如果合法,net.ParseIP 會將其轉(zhuǎn)換成字符數(shù)組([]byte)。
第二步:
- 是使用 binary.Read 方法將上面的字符數(shù)組以大端對齊的方式寫入 ret 變量中。
func InetAddr(ipaddr string) uint32 {
var ret uint32
ip := net.ParseIP(ipaddr)
if ip == nil {
return 0
}
if err := binary.Read(bytes.NewBuffer(ip.To4()), binary.BigEndian, &ret); err != nil {
return 0
}
return ret
}2. 整數(shù)轉(zhuǎn)字符串
整數(shù)轉(zhuǎn)字符串比較簡單,
以一個(gè)例子來演示:
有 IPv4 地址十六進(jìn)制整數(shù)表示形式為 0x01020304,將其分別移位24、16、8、0后,
會得到 IP 地址字符串表示形式的 4 段:
byte(0x01020304 >> 24) = byte(0x01) = 1
byte(0x01020304 >> 16) = byte(0x0102) = 2
byte(0x01020304 >> 8) = byte(0x010203) = 3
byte(0x01020304 >> 0) = byte(0x01020304) = 4
將這四個(gè)值用 . 拼接后,即可得到字符串表式:1.2.3.4
func IPv4Uint32ToString(ip uint32) string {
return fmt.Sprintf("%d.%d.%d.%d", byte(ip>>24), byte(ip>>16), byte(ip>>8), byte(ip))
}注意:
byte 在強(qiáng)制轉(zhuǎn)換大于其存儲最大值時(shí)(0xff)時(shí)會溢出,會將左邊部分丟棄。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
go引入自建包名報(bào)錯(cuò):package?XXX?is?not?in?std解決辦法
這篇文章主要給大家介紹了go引入自建包名報(bào)錯(cuò):package?XXX?is?not?in?std的解決辦法,這是在寫測試引入包名的時(shí)候遇到的錯(cuò)誤提示,文中將解決辦法介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
Golang哈希算法實(shí)現(xiàn)配置文件的監(jiān)控功能詳解
這篇文章主要介紹了Golang哈希算法實(shí)現(xiàn)配置文件的監(jiān)控功能,哈希和加密類似,唯一區(qū)別是哈希是單項(xiàng)的,即哈希后的數(shù)據(jù)無法解密,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-03-03
go高并發(fā)時(shí)append方法偶現(xiàn)錯(cuò)誤解決分析
這篇文章主要為大家介紹了go高并發(fā)時(shí)append方法偶現(xiàn)錯(cuò)誤解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10

