Hello all. I am creating a custom exporter for FreeNAS https://github.com/Maelos/freenas_exporter and am stuck on the conversion of the string of bytes provided by the commands output to a float. Here is my code, what I have tried, and my results:
What I have tried and results (commented so you can try and see each https://play.golang.org/p/sevfk7Nt2w4 Attempt 1 = binary.LittleEndian.Uint64([]bytes) to math.Float64frombits Attempt 2 = bytes to string, String to float (strconv) Attempt 3 = Bytes to bytes.Reader to binary.Read(slice of bytes, binary.LittleEndian, floatVariableToFill) to error check Please let me know what more I can provide. I will keep hacking away at it tomorrow, but hoping I can get this done soon. Full go play write up below: package main import ( //You may need to edit these in or out depending upon the attempt "bytes" "encoding/binary" "fmt" //"strconv" //"math" ) func main() { // I have been able to test this part and I do get a return of "[50 10]" which is correct (converts string "2" for 2 CPUs). The exact statement may be a bit different. // I am running the script on the latest FreeNAS whic his built from 11.1STABLE FreeBSD. I have Go installed and am building the files on the shell //numCPUCmd := exec.Command("bash", "-c","/usr/local/bin/ipmitool -I lanplus -H ipmiAddress -U ipmiUser -f /root/ipmi_password sdr elist all | grep -c -i \"cpu.*temp\"") //numCPUBytes, _ := numCPUCmd.Output() //returns a slice of bytes and an error // ATTEMPT 1 var flty float64 sob := []byte{50, 10} fmt.Printf("\n%T %v\n\n", sob, sob) buf := bytes.NewReader(sob) err := binary.Read(buf, binary.LittleEndian, &flty) if err != nil { fmt.Println("binary.Read failed:", err) } fmt.Println(flty) /*Result []uint8 [50 10] binary.Read failed: unexpected EOF 0 */ //////////////////////////////////////////////////////// //ATTEMPT 2 /* var f float64 text := []byte{50, 10} // A decimal value represented as Latin-1 text f, err := strconv.ParseFloat(string(text), 64) if err != nil { panic(err) } fmt.Println(f) */ /*Result panic: strconv.ParseFloat: parsing "2\n": invalid syntax goroutine 1 [running]: main.main() /tmp/sandbox657430918/main.go:44 +0x160 */ //////////////////////////////////////////////// //ATTEMPT3 /* sob := []byte{50, 10} bits := binary.LittleEndian.Uint64(sob) fmt.Printf("\n\n%T %v\n\n", bits, bits) flty := math.Float64frombits(bits) fmt.Printf("\n\n%T %v\n\n", flty, flty) inty := int(flty) fmt.Printf("\n\n%T %v\n\n", inty, inty) */ /* Result panic: runtime error: index out of range goroutine 1 [running]: encoding/binary.binary.littleEndian.Uint64(...) /usr/local/go/src/encoding/binary/binary.go:76 main.main() /tmp/sandbox742704811/main.go:62 +0x20 */ } -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.