一、[]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