не могу записать в файл - PullRequest
0 голосов
/ 11 марта 2020

Я пытался закодировать OneTimePad с go, но не могу записать в файл: файлы представляют собой файлы bin (скомпилированный Go код). Мой код:

package main
import ("fmt"
       "io/ioutil"
        "math/rand")

func rndByte(l int)[]byte{


    token := make([]byte, l)
    rand.Read(token)
    return token
}

func writeByteFile(filename string,inp []byte ){

    err := ioutil.WriteFile(filename, inp, 0644)
    if err != nil {
        fmt.Println(err)
    }
}

func readFile(filename string) []byte {
        data, err := ioutil.ReadFile(filename)
        if err != nil {
                fmt.Println("File reading error", err)

        }

        return data
}



func main(){
    x := readFile("xor")
  //  y:= len(x)
    z := rndByte(489)

    var res [489]byte
    for i:=0; i != 489; i++{
        res[i] = x[i] ^ z[i]
    } 
    writeByteFile("xorKey", z)
    writeByteFile("xorENC", res)
}


Моя ошибка:

# аргументы командной строки ./xorbyte.go:47:19: нельзя использовать res (тип [489] байт) в качестве байта типа [] в аргументе для writeByteFile

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

[489]byte и []byte - это разные типы.

[489]byte - это массив

[]byte - это срез

попытайтесь преобразовать массив в срез :

writeByteFile("xorENC", res[:])

Оформить заказ https://blog.golang.org/go-slices-usage-and-internals

1 голос
/ 11 марта 2020

Здесь вы делаете неправильное преобразование из байтового массива в байтовый фрагмент. Чтобы преобразовать массив в фрагмент, вы можете использовать следующий синтаксис:

var byteArray [5]byte
byteSlice := byteArray[:]

Ref: Преобразовать массив в фрагмент в Go

Итак, вы можете попробовать таким образом,

writeByteFile("xorENC", res[:])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...