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 }