Как записать шестнадцатеричные байты в текстовый файл в Go? - PullRequest
0 голосов
/ 17 мая 2018

Я хочу записать операции ввода-вывода порта в текстовый файл с языком Go. Я написал такую ​​функцию:

func trace (buffer []byte){

    f, err := os.OpenFile("trace.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    if err != nil {
        return
    }
    defer f.Close()

    for _, val := range buffer{         
        if _, err := f.Write([]byte{val});err!=nil{return}    
    }
}

Но метод f.Write записывает в файл строковый эквивалент ASCII, но не [] байтовые значения. Мне нужны шестнадцатеричные значения, а не строки в моем журнале. Не могу понять, почему код f.Write([]byte{"string"}) действителен, а что-то вроде f.Write([]byte{fmt.Spirintf("%x", val)}) не компилируется ...

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Наконец, мой рабочий код:

func trace (buffer []byte){

    if !Debug{return}

    f, err := os.OpenFile("trace.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    if err != nil {
        return
    }
    defer f.Close()

    date:=fmt.Sprintf("%v", time.Now().Format("2018-01-02 15:01:02 PM Jan Mon"))

    if _, err := f.Write([]byte(date+"\r\n"));err!=nil{return}

    var counter int = 0

    for _, val := range buffer{
        if counter == 16{
            if _, err := f.Write([]byte("\r\n"));err!=nil{return}
            counter=0
        }

        fmt.Fprintf(f, "%02x ", val)
        counter++
    }

    if _, err := f.Write([]byte("\r\n\r\n"));err!=nil{return}

}
0 голосов
/ 17 мая 2018

Если я правильно понял ваш вопрос, вы ищете решение, чтобы записать в журнал шестнадцатеричное значение строки ASCII?ех."41" == {0x3 4 , 0x3 1 }?Если да, то код, который вы ищете:

f.Write([]byte(fmt.Sprintf("%x", buffer )))
...