ms-tools/cli/hexdump.go
Bertold Van den Bergh 680e4f77ab Initial commit of code
2021-07-25 23:09:00 +02:00

68 lines
1.1 KiB
Go

package main
import (
"fmt"
"github.com/fatih/color"
)
func hexdump(offset int, data []byte, mark []bool) string {
var result string
red := color.New(color.FgRed)
for len(data) > 0 {
l := len(data)
if l > 32 {
l = 32
}
work := data[:l]
data = data[l:]
var workMark []bool
if mark != nil {
workMark = mark[:l]
mark = mark[l:]
}
var workHex string
var workAscii string
for i := 0; i < 32; i++ {
m := byte(0)
valid := i < len(work)
delta := false
if valid {
m = work[i]
if workMark != nil && workMark[i] {
delta = true
}
}
if valid {
if delta {
workHex += red.Sprintf("%02x ", m)
} else {
workHex += fmt.Sprintf("%02x ", m)
}
if m < 32 || m > 126 {
m = '.'
}
if delta {
workAscii += red.Sprintf("%c", m)
} else {
workAscii += fmt.Sprintf("%c", m)
}
} else {
workHex += " "
workAscii += " "
}
if i%8 == 7 {
workHex += " "
}
}
result += fmt.Sprintf("%08x %s|%s|\n", offset, workHex, workAscii)
offset += l
}
return result
}