package main import ( "fmt" "regexp" "strconv" ) type CanFrame struct { canid uint16 payload []uint8 date string } // (2022-07-08 16:54:15.587099) can0 100 [8] 00 00 00 00 00 00 64 00 const expr = "\\((.*)\\)\\s+can\\d+\\s+(\\d+)\\s+\\[\\d\\]\\s+([A-F0-9]+)\\s+([A-F0-9]+)\\s+([A-F0-9]+)\\s+([A-F0-9]+)\\s+([A-F0-9]+)\\s+([A-F0-9]+)\\s+([A-F0-9]+)\\s+([A-F0-9]+)" const length = 11 var pattern = regexp.MustCompile(expr) func FromString(text *string) *CanFrame { submatch := pattern.FindStringSubmatch(*text) if len(submatch) == length { canid, err := strconv.Atoi(submatch[2]) if err != nil { return nil } payload := make([]uint8, 8) for idx, octet := range submatch[3:] { val, err := strconv.ParseUint(octet, 16, 0) if err != nil { fmt.Println(err) continue } payload[idx] = uint8(val) } return &CanFrame{ date: submatch[1], canid: uint16(canid), payload: payload, } } return nil }