преобразовать строку в байтовый массив фиксированного размера в Go - PullRequest
22 голосов
/ 07 ноября 2011

Есть ли удобный способ для инициализации массива байтов?

package main
import "fmt"
type T1 struct {
  f1 [5]byte  // I use fixed size here for file format or network packet format.
  f2 int32
}
func main() {
  t := T1{"abcde", 3}
  // t:= T1{[5]byte{'a','b','c','d','e'}, 3} // work, but ugly
  fmt.Println(t)
}

prog.go: 8: нельзя использовать «abcde» (строка типа) в качестве типа [5] uint8 в значении поля

если я изменю строку на t := T1{[5]byte("abcde"), 3}

prog.go: 8: невозможно преобразовать «abcde» (тип string) в тип [5] uint8

Ответы [ 2 ]

13 голосов
/ 08 ноября 2011

Вы можете скопировать строку в фрагмент байтового массива:

package main
import "fmt"
type T1 struct {
  f1 [5]byte
  f2 int
}
func main() {
  t := T1{f2: 3}
  copy(t.f1[:], "abcde")
  fmt.Println(t)
}

Редактировать: используя именованную форму литерала T1, по предложению jimt.

13 голосов
/ 07 ноября 2011

Есть ли какая-то особая причина, по которой вам нужен байтовый массив? В Go вам лучше использовать байтовый срез.

package main
import "fmt"

type T1 struct {
   f1 []byte
   f2 int
}

func main() {
  t := T1{[]byte("abcde"), 3}
  fmt.Println(t)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...