| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package utils
- import (
- "bytes"
- "encoding/binary"
- "fmt"
- )
- // isSymbol表示有无符号
- func BytesToInt(b []byte, isSymbol bool) (int, error){
- if isSymbol {
- return bytesToIntS(b)
- }
- return bytesToIntU(b)
- }
- //字节数(大端)组转成int(无符号的)
- func bytesToIntU(b []byte) (int, error) {
- if len(b) == 3 {
- b = append([]byte{0},b...)
- }
- bytesBuffer := bytes.NewBuffer(b)
- switch len(b) {
- case 1:
- var tmp uint8
- err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
- return int(tmp), err
- case 2:
- var tmp uint16
- err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
- return int(tmp), err
- case 4:
- var tmp uint32
- err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
- return int(tmp), err
- default:
- return 0,fmt.Errorf("%s", "BytesToInt bytes lenth is invaild!")
- }
- }
- //字节数(大端)组转成int(有符号)
- func bytesToIntS(b []byte) (int, error) {
- if len(b) == 3 {
- b = append([]byte{0},b...)
- }
- bytesBuffer := bytes.NewBuffer(b)
- switch len(b) {
- case 1:
- var tmp int8
- err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
- return int(tmp), err
- case 2:
- var tmp int16
- err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
- return int(tmp), err
- case 4:
- var tmp int32
- err := binary.Read(bytesBuffer, binary.BigEndian, &tmp)
- return int(tmp), err
- default:
- return 0,fmt.Errorf("%s", "BytesToInt bytes lenth is invaild!")
- }
- }
- //整形转换成字节
- func IntToBytes(n int,b byte) ([]byte,error) {
- switch b {
- case 1:
- tmp := int8(n)
- bytesBuffer := bytes.NewBuffer([]byte{})
- binary.Write(bytesBuffer, binary.BigEndian, &tmp)
- return bytesBuffer.Bytes(),nil
- case 2:
- tmp := int16(n)
- bytesBuffer := bytes.NewBuffer([]byte{})
- binary.Write(bytesBuffer, binary.BigEndian, &tmp)
- return bytesBuffer.Bytes(),nil
- case 3,4:
- tmp := int32(n)
- bytesBuffer := bytes.NewBuffer([]byte{})
- binary.Write(bytesBuffer, binary.BigEndian, &tmp)
- return bytesBuffer.Bytes(),nil
- }
- return nil,fmt.Errorf("IntToBytes b param is invaild")
- }
|