| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- 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")
- }
|