123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530 |
- 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
- }
|