package yu_pack // -----------------------------------------------------------------------------------------------------解包 func (t *Pack) PopLen() int { return len(t.buf) - t.get_i } func (t *Pack) PopByte() (result byte, ok bool) { if t.get_i+1 > len(t.buf) { return } result = t.buf[t.get_i] t.get_i++ ok = true return } /* PopInt16L 读取int16数据 字节序为:小端字节序——将低序字节存储在起始地址(123=>[123 0]) */ func (t *Pack) PopInt16L() (result int16, ok bool) { if t.get_i+2 > len(t.buf) { return } result = int16(t.buf[t.get_i]) | int16(t.buf[t.get_i+1])<<8 t.get_i += 2 ok = true return } /* PopInt16B 读取int16数据 字节序为:大端字节序——将高序字节存储在起始地址(123=>[0 123]) */ func (t *Pack) PopInt16B() (result int16, ok bool) { if t.get_i+2 > len(t.buf) { return } result = int16(t.buf[t.get_i+1]) | int16(t.buf[t.get_i])<<8 t.get_i += 2 ok = true return } /* PopInt16L 读取int16数据 字节序为:小端字节序——将低序字节存储在起始地址(123=>[123 0]) */ func (t *Pack) PopUint16L() (result uint16, ok bool) { if t.get_i+2 > len(t.buf) { return } result = uint16(t.buf[t.get_i]) | uint16(t.buf[t.get_i+1])<<8 t.get_i += 2 ok = true return } /* PopInt16B 读取int16数据 字节序为:大端字节序——将高序字节存储在起始地址(123=>[0 123]) */ func (t *Pack) PopUint16B() (result uint16, ok bool) { if t.get_i+2 > len(t.buf) { return } result = uint16(t.buf[t.get_i+1]) | uint16(t.buf[t.get_i])<<8 t.get_i += 2 ok = true return } /* PopInt32L 读取int32数据 字节序为:小端字节序——将低序字节存储在起始地址(123=>[123 0]) */ func (t *Pack) PopInt32L() (result int32, ok bool) { if t.get_i+4 > len(t.buf) { return } result = int32(t.buf[t.get_i]) | int32(t.buf[t.get_i+1])<<8 | int32(t.buf[t.get_i+2])<<16 | int32(t.buf[t.get_i+3])<<24 t.get_i += 4 ok = true return } /* PopInt32B 读取int32数据 字节序为:大端字节序——将高序字节存储在起始地址(123=>[0 123]) */ func (t *Pack) PopInt32B() (result int32, ok bool) { if t.get_i+4 > len(t.buf) { return } result = int32(t.buf[t.get_i+3]) | int32(t.buf[t.get_i+2])<<8 | int32(t.buf[t.get_i+1])<<16 | int32(t.buf[t.get_i])<<24 t.get_i += 4 ok = true return } /* PopInt32L 读取int32数据 字节序为:小端字节序——将低序字节存储在起始地址(123=>[123 0]) */ func (t *Pack) PopUint32L() (result uint32, ok bool) { if t.get_i+4 > len(t.buf) { return } result = uint32(t.buf[t.get_i]) | uint32(t.buf[t.get_i+1])<<8 | uint32(t.buf[t.get_i+2])<<16 | uint32(t.buf[t.get_i+3])<<24 t.get_i += 4 ok = true return } /* PopInt32B 读取int32数据 字节序为:大端字节序——将高序字节存储在起始地址(123=>[0 123]) */ func (t *Pack) PopUint32B() (result uint32, ok bool) { if t.get_i+4 > len(t.buf) { return } result = uint32(t.buf[t.get_i+3]) | uint32(t.buf[t.get_i+2])<<8 | uint32(t.buf[t.get_i+1])<<16 | uint32(t.buf[t.get_i])<<24 t.get_i += 4 ok = true return } /* PopInt64L 读取int64数据 字节序为:小端字节序——将低序字节存储在起始地址(123=>[123 0]) */ func (t *Pack) PopInt64L() (result int64, ok bool) { if t.get_i+8 > len(t.buf) { return } result = int64(t.buf[t.get_i]) | int64(t.buf[t.get_i+1])<<8 | int64(t.buf[t.get_i+2])<<16 | int64(t.buf[t.get_i+3])<<24 | int64(t.buf[t.get_i+4])<<32 | int64(t.buf[t.get_i+5])<<40 | int64(t.buf[t.get_i+6])<<48 | int64(t.buf[t.get_i+7])<<56 t.get_i += 8 ok = true return } /* PopInt64B 读取int64数据 字节序为:大端字节序——将高序字节存储在起始地址(123=>[0 123]) */ func (t *Pack) PopInt64B() (result int64, ok bool) { if t.get_i+8 > len(t.buf) { return } result = int64(t.buf[t.get_i+7]) | int64(t.buf[t.get_i+6])<<8 | int64(t.buf[t.get_i+5])<<16 | int64(t.buf[t.get_i+4])<<24 | int64(t.buf[t.get_i+3])<<32 | int64(t.buf[t.get_i+2])<<40 | int64(t.buf[t.get_i+1])<<48 | int64(t.buf[t.get_i])<<56 t.get_i += 8 ok = true return } /* PopInt64L 读取int64数据 字节序为:小端字节序——将低序字节存储在起始地址(123=>[123 0]) */ func (t *Pack) PopUint64L() (result uint64, ok bool) { if t.get_i+8 > len(t.buf) { return } result = uint64(t.buf[t.get_i]) | uint64(t.buf[t.get_i+1])<<8 | uint64(t.buf[t.get_i+2])<<16 | uint64(t.buf[t.get_i+3])<<24 | uint64(t.buf[t.get_i+4])<<32 | uint64(t.buf[t.get_i+5])<<40 | uint64(t.buf[t.get_i+6])<<48 | uint64(t.buf[t.get_i+7])<<56 t.get_i += 8 ok = true return } /* PopInt64B 读取int64数据 字节序为:大端字节序——将高序字节存储在起始地址(123=>[0 123]) */ func (t *Pack) PopUint64B() (result uint64, ok bool) { if t.get_i+8 > len(t.buf) { return } result = uint64(t.buf[t.get_i+7]) | uint64(t.buf[t.get_i+6])<<8 | uint64(t.buf[t.get_i+5])<<16 | uint64(t.buf[t.get_i+4])<<24 | uint64(t.buf[t.get_i+3])<<32 | uint64(t.buf[t.get_i+2])<<40 | uint64(t.buf[t.get_i+1])<<48 | uint64(t.buf[t.get_i])<<56 t.get_i += 8 ok = true return } // PopBytes 读取[]byte数据,n < 0 时读取剩余所有数据 func (t *Pack) PopBytes(n int) (result []byte, ok bool) { if n == 0 { return } if n < 0 { result = make([]byte, len(t.buf)-t.get_i) copy(result, t.buf[t.get_i:]) t.get_i = len(t.buf) ok = true return } if t.get_i+n > len(t.buf) { return } result = make([]byte, n) copy(result, t.buf[t.get_i:t.get_i+n]) t.get_i += n ok = true return } func (t *Pack) PopBytesByte(add int) (result []byte, ok bool) { if t.get_i+1 > len(t.buf) { return } j_n := int(t.buf[t.get_i]) if j_n += add; j_n < 0 { return } if t.get_i+1+j_n > len(t.buf) { return } t.get_i++ result = make([]byte, j_n) copy(result, t.buf[t.get_i:t.get_i+j_n]) t.get_i += j_n ok = true return } func (t *Pack) PopBytesInt16L(add int) (result []byte, ok bool) { if t.get_i+2 > len(t.buf) { return } j_n := int(int16(t.buf[t.get_i]) | int16(t.buf[t.get_i+1])<<8) if j_n += add; j_n < 0 { return } if t.get_i+2+j_n > len(t.buf) { return } t.get_i += 2 result = make([]byte, j_n) copy(result, t.buf[t.get_i:t.get_i+j_n]) t.get_i += j_n ok = true return } func (t *Pack) PopBytesInt16B(add int) (result []byte, ok bool) { if t.get_i+2 > len(t.buf) { return } j_n := int(int16(t.buf[t.get_i+1]) | int16(t.buf[t.get_i])<<8) if j_n += add; j_n < 0 { return } if t.get_i+2+j_n > len(t.buf) { return } t.get_i += 2 result = make([]byte, j_n) copy(result, t.buf[t.get_i:t.get_i+j_n]) t.get_i += j_n ok = true return } func (t *Pack) PopBytesInt32L(add int) (result []byte, ok bool) { if t.get_i+4 > len(t.buf) { return } j_n := int(int32(t.buf[t.get_i]) | int32(t.buf[t.get_i+1])<<8 | int32(t.buf[t.get_i+2])<<16 | int32(t.buf[t.get_i+3])<<24) if j_n += add; j_n < 0 { return } if t.get_i+4+j_n > len(t.buf) { return } t.get_i += 4 result = make([]byte, j_n) copy(result, t.buf[t.get_i:t.get_i+j_n]) t.get_i += j_n ok = true return } func (t *Pack) PopBytesInt32B(add int) (result []byte, ok bool) { if t.get_i+4 > len(t.buf) { return } j_n := int(int32(t.buf[t.get_i+3]) | int32(t.buf[t.get_i+2])<<8 | int32(t.buf[t.get_i+1])<<16 | int32(t.buf[t.get_i])<<24) if j_n += add; j_n < 0 { return } if t.get_i+4+j_n > len(t.buf) { return } t.get_i += 4 result = make([]byte, j_n) copy(result, t.buf[t.get_i:t.get_i+j_n]) t.get_i += j_n ok = true return } func (t *Pack) PopBytesInt64L(add int) (result []byte, ok bool) { if t.get_i+8 > len(t.buf) { return } j_n := int(int64(t.buf[t.get_i]) | int64(t.buf[t.get_i+1])<<8 | int64(t.buf[t.get_i+2])<<16 | int64(t.buf[t.get_i+3])<<24 | int64(t.buf[t.get_i+4])<<32 | int64(t.buf[t.get_i+5])<<40 | int64(t.buf[t.get_i+6])<<48 | int64(t.buf[t.get_i+7])<<56) if j_n += add; j_n < 0 { return } if t.get_i+8+j_n > len(t.buf) { return } t.get_i += 8 result = make([]byte, j_n) copy(result, t.buf[t.get_i:t.get_i+j_n]) t.get_i += j_n ok = true return } func (t *Pack) PopBytesInt64B(add int) (result []byte, ok bool) { if t.get_i+8 > len(t.buf) { return } j_n := int(int64(t.buf[t.get_i+7]) | int64(t.buf[t.get_i+6])<<8 | int64(t.buf[t.get_i+5])<<16 | int64(t.buf[t.get_i+4])<<24 | int64(t.buf[t.get_i+3])<<32 | int64(t.buf[t.get_i+2])<<40 | int64(t.buf[t.get_i+1])<<48 | int64(t.buf[t.get_i])<<56) if j_n += add; j_n < 0 { return } if t.get_i+8+j_n > len(t.buf) { return } t.get_i += 8 result = make([]byte, j_n) copy(result, t.buf[t.get_i:t.get_i+j_n]) t.get_i += j_n ok = true return } // PopString 读取string数据,n<0时读取剩余所有数据 func (t *Pack) PopString(n int) (result string, ok bool) { if n == 0 { return } if n < 0 { result = string(t.buf[t.get_i:]) t.get_i = len(t.buf) ok = true return } if t.get_i+n > len(t.buf) { return } result = string(t.buf[t.get_i : t.get_i+n]) t.get_i += n ok = true return } func (t *Pack) PopStringByte(add int) (result string, ok bool) { if t.get_i+1 > len(t.buf) { return } j_n := int(t.buf[t.get_i]) if j_n += add; j_n < 0 { return } if t.get_i+1+j_n > len(t.buf) { return } t.get_i++ result = string(t.buf[t.get_i : t.get_i+j_n]) t.get_i += j_n ok = true return } func (t *Pack) PopStringInt16L(add int) (result string, ok bool) { if t.get_i+2 > len(t.buf) { return } j_n := int(int16(t.buf[t.get_i]) | int16(t.buf[t.get_i+1])<<8) if j_n += add; j_n < 0 { return } if t.get_i+2+j_n > len(t.buf) { return } t.get_i += 2 result = string(t.buf[t.get_i : t.get_i+j_n]) t.get_i += j_n ok = true return } func (t *Pack) PopStringInt16B(add int) (result string, ok bool) { if t.get_i+2 > len(t.buf) { return } j_n := int(int16(t.buf[t.get_i+1]) | int16(t.buf[t.get_i])<<8) if j_n += add; j_n < 0 { return } if t.get_i+2+j_n > len(t.buf) { return } t.get_i += 2 result = string(t.buf[t.get_i : t.get_i+j_n]) t.get_i += j_n ok = true return } func (t *Pack) PopStringInt32L(add int) (result string, ok bool) { if t.get_i+4 > len(t.buf) { return } j_n := int(int32(t.buf[t.get_i]) | int32(t.buf[t.get_i+1])<<8 | int32(t.buf[t.get_i+2])<<16 | int32(t.buf[t.get_i+3])<<24) if j_n += add; j_n < 0 { return } if t.get_i+4+j_n > len(t.buf) { return } t.get_i += 4 result = string(t.buf[t.get_i : t.get_i+j_n]) t.get_i += j_n ok = true return } func (t *Pack) PopStringInt32B(add int) (result string, ok bool) { if t.get_i+4 > len(t.buf) { return } j_n := int(int32(t.buf[t.get_i+3]) | int32(t.buf[t.get_i+2])<<8 | int32(t.buf[t.get_i+1])<<16 | int32(t.buf[t.get_i])<<24) if j_n += add; j_n < 0 { return } if t.get_i+4+j_n > len(t.buf) { return } t.get_i += 4 result = string(t.buf[t.get_i : t.get_i+j_n]) t.get_i += j_n ok = true return } func (t *Pack) PopStringInt64L(add int) (result string, ok bool) { if t.get_i+8 > len(t.buf) { return } j_n := int(int64(t.buf[t.get_i]) | int64(t.buf[t.get_i+1])<<8 | int64(t.buf[t.get_i+2])<<16 | int64(t.buf[t.get_i+3])<<24 | int64(t.buf[t.get_i+4])<<32 | int64(t.buf[t.get_i+5])<<40 | int64(t.buf[t.get_i+6])<<48 | int64(t.buf[t.get_i+7])<<56) if j_n += add; j_n < 0 { return } if t.get_i+8+j_n > len(t.buf) { return } t.get_i += 8 result = string(t.buf[t.get_i : t.get_i+j_n]) t.get_i += j_n ok = true return } func (t *Pack) PopStringInt64B(add int) (result string, ok bool) { if t.get_i+8 > len(t.buf) { return } j_n := int(int64(t.buf[t.get_i+7]) | int64(t.buf[t.get_i+6])<<8 | int64(t.buf[t.get_i+5])<<16 | int64(t.buf[t.get_i+4])<<24 | int64(t.buf[t.get_i+3])<<32 | int64(t.buf[t.get_i+2])<<40 | int64(t.buf[t.get_i+1])<<48 | int64(t.buf[t.get_i])<<56) if j_n += add; j_n < 0 { return } if t.get_i+8+j_n > len(t.buf) { return } t.get_i += 8 result = string(t.buf[t.get_i : t.get_i+j_n]) t.get_i += j_n ok = true return }