package main import ( "bytes" "fmt" "io" "log" "os" "strconv" ) var Logger = log.New(os.Stderr, "", 0) func dumpString(w io.Writer, s string) { n := 0 for _, char := range s { // I don't care about the byte number, just chars... // https://go.dev/ref/spec#Rune_literals fmt.Fprintf(w, "Number: %-4d Char: %-6s Unicode: %U Hex Bytes: %+v\n", n, strconv.QuoteRune(char), char, []byte(string(char))) n++ } } func main() { buf := &bytes.Buffer{} n, err := io.Copy(buf, os.Stdin) if err != io.EOF && err != nil { Logger.Fatalf("Failed to read stdin: %s\n", err) } Logger.Println("------------------------") Logger.Printf("Read in %d bytes\n", n) Logger.Println("------------------------") dumpString(os.Stdout, buf.String()) }