github.com/cheng762/platon-go@v1.8.17-0.20190529111256-7deff2d7be26/cmd/ctool/core/bytes_util.go (about)

     1  package core
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/binary"
     6  	"errors"
     7  	"math"
     8  	"strconv"
     9  )
    10  
    11  func BytesCombine(pBytes ...[]byte) []byte {
    12  	return bytes.Join(pBytes, []byte(""))
    13  }
    14  
    15  func Int32ToBytes(n int32) []byte {
    16  	tmp := int32(n)
    17  	bytesBuffer := bytes.NewBuffer([]byte{})
    18  	binary.Write(bytesBuffer, binary.BigEndian, tmp)
    19  	return bytesBuffer.Bytes()
    20  }
    21  
    22  func BytesToInt32(b []byte) int32 {
    23  	bytesBuffer := bytes.NewBuffer(b)
    24  	var tmp int32
    25  	binary.Read(bytesBuffer, binary.BigEndian, &tmp)
    26  	return int32(tmp)
    27  }
    28  
    29  func Int64ToBytes(n int64) []byte {
    30  	tmp := int64(n)
    31  	bytesBuffer := bytes.NewBuffer([]byte{})
    32  	binary.Write(bytesBuffer, binary.BigEndian, tmp)
    33  	return bytesBuffer.Bytes()
    34  }
    35  
    36  func BytesToInt64(b []byte) int64 {
    37  	bytesBuffer := bytes.NewBuffer(b)
    38  	var tmp int64
    39  	binary.Read(bytesBuffer, binary.BigEndian, &tmp)
    40  	return int64(tmp)
    41  }
    42  
    43  func Float32ToBytes(float float32) []byte {
    44  	bits := math.Float32bits(float)
    45  	bytes := make([]byte, 4)
    46  	binary.LittleEndian.PutUint32(bytes, bits)
    47  	return bytes
    48  }
    49  
    50  func BytesToFloat32(bytes []byte) float32 {
    51  	bits := binary.LittleEndian.Uint32(bytes)
    52  	return math.Float32frombits(bits)
    53  }
    54  
    55  func Float64ToBytes(float float64) []byte {
    56  	bits := math.Float64bits(float)
    57  	bytes := make([]byte, 8)
    58  	binary.LittleEndian.PutUint64(bytes, bits)
    59  	return bytes
    60  }
    61  
    62  func BytesToFloat64(bytes []byte) float64 {
    63  	bits := binary.LittleEndian.Uint64(bytes)
    64  	return math.Float64frombits(bits)
    65  }
    66  func BoolToBytes(b bool) []byte {
    67  	buf := bytes.NewBuffer([]byte{})
    68  	binary.Write(buf, binary.BigEndian, b)
    69  	return buf.Bytes()
    70  }
    71  
    72  func BytesConverter(source []byte, t string) interface{} {
    73  	switch t {
    74  	case "int32":
    75  		return BytesToInt32(source)
    76  	case "int64":
    77  		return BytesToInt64(source)
    78  	case "float32":
    79  		return BytesToFloat32(source)
    80  	case "float64":
    81  		return BytesToFloat64(source)
    82  	case "string":
    83  		return string(source[:])
    84  	case "bool":
    85  		return bytes.Equal(source, []byte{1})
    86  	default:
    87  		return source
    88  	}
    89  }
    90  
    91  func StringConverter(source string, t string) ([]byte, error) {
    92  	switch t {
    93  	case "int32", "uint32", "uint", "int":
    94  		dest, err := strconv.Atoi(source)
    95  		return Int32ToBytes(int32(dest)), err
    96  	case "int64", "uint64":
    97  		dest, err := strconv.ParseInt(source, 10, 64)
    98  		return Int64ToBytes(dest), err
    99  	case "float32":
   100  		dest, err := strconv.ParseFloat(source, 32)
   101  		return Float32ToBytes(float32(dest)), err
   102  	case "float64":
   103  		dest, err := strconv.ParseFloat(source, 64)
   104  		return Float64ToBytes(dest), err
   105  	case "bool":
   106  		if "true" == source || "false" == source {
   107  			return BoolToBytes("true" == source), nil
   108  		} else {
   109  			return []byte{}, errors.New("invalid boolean param")
   110  		}
   111  	default:
   112  		return []byte(source), nil
   113  	}
   114  
   115  }