golang 處理網絡接收的UDP數據

 

一、[]byte與struct互轉

type  CDNDispatchReq struct{
	 flag bool
	 Fromsegid int32
	 Tosegid int32
};


func handle_DISPATCH(data []byte, datalen int, ip net.IP, port int) int {

	req := *(**CDNDispatchReq)(unsafe.Pointer(&data))
	flag := req.flag
	
}

 

二、求struct的sizeof

unsafe.Sizeof( *req)

	size := unsafe.Sizeof( *req)

三、實現 ntohs

	uint16 port = 0x8000 //網絡字節序
	portData := *(*[]byte)(unsafe.Pointer(&port)) //
	pt := binary.BigEndian.Uint16(portData)

四、幾個字節序轉換函數

func Htons(i uint16) uint16 {
	return (i<<8)&0xff00 | i>>8
}
func Ntohl(i uint32) uint32 {
	return (i<<24)&0xff000000 | (i>>24) | (i<<8)&0x00ff0000 | (i>>8)&0x0000ff00
}

func Ntohs(i uint16) uint16 {
	return (i<<8)&0xff00 | i>>8

 

參考:

https://www.jb51.net/article/144265.htm

http://www.mamicode.com/info-detail-2822468.html

https://studygolang.com/articles/11444

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章