[go] 바이트 배열에 문자열을 할당하는 방법

바이트 배열에 문자열을 할당하고 싶습니다.

var arr [20]byte
str := "abc"
for k, v := range []byte(str) {
  arr[k] = byte(v)
}

다른 방법이 있습니까?



답변

안전하고 간단합니다.

[]byte("Here is a string....")


답변

문자열에서 바이트 슬라이스로 변환하는 경우 string -> []byte:

[]byte(str)

배열을 슬라이스로 변환하려면 [20]byte -> []byte다음을 수행하십시오.

arr[:]

문자열을 배열에 복사하려면 string -> [20]byte:

copy(arr[:], str)

위와 동일하지만 먼저 문자열을 슬라이스로 명시 적으로 변환합니다.

copy(arr[:], []byte(str))

  • 내장 copy기능 은 슬라이스 에서 슬라이스 로만 복사 합니다 .
  • 배열은 “기본 데이터”이고 슬라이스는 “기본 데이터의 뷰포트”입니다.
  • 를 사용 [:]하면 배열을 슬라이스로 사용할 수 있습니다.
  • 문자열을 복사 할 수있는 슬라이스로 인정하지 않습니다 ,하지만 복사 할 수있는 슬라이스 자격 에서 (문자열은 불변).
  • 문자열이 너무 길면, copy맞는 문자열 부분 만 복사합니다.

이 코드는 :

var arr [20]byte
copy(arr[:], "abc")
fmt.Printf("array: %v (%T)\n", arr, arr)

… 다음 출력을 제공합니다.

array: [97 98 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] ([20]uint8)

Go Playground 에서도 이용할 수있었습니다


답변

예를 들어

package main

import "fmt"

func main() {
    s := "abc"
    var a [20]byte
    copy(a[:], s)
    fmt.Println("s:", []byte(s), "a:", a)
}

산출:

s: [97 98 99] a: [97 98 99 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]


답변

케이크 조각 :

arr := []byte("That's all folks!!")


답변

더 낫다고 생각합니다 ..

package main

import "fmt"

func main() {
    str := "abc"
    mySlice := []byte(str)
    fmt.Printf("%v -> '%s'",mySlice,mySlice )
}

여기를 확인하십시오 : http://play.golang.org/p/vpnAWHZZk7


답변

문자열을 바이트 슬라이스로 변환

[] 문자열을 [] 바이트 유형으로 변환하는 빠른 방법이 필요합니다. 텍스트 데이터를 랜덤 액세스 파일 또는 입력 데이터가 [] 바이트 유형이어야하는 다른 유형의 데이터 조작에 저장하는 등의 상황에서 사용합니다.

package main

func main() {

    var s string

    //...

    b := []byte(s)

    //...
}

바이트 슬라이스를 데이터 매개 변수로 허용하는 ioutil.WriteFile을 사용할 때 유용합니다.

WriteFile func(filename string, data []byte, perm os.FileMode) error

또 다른 예

package main

import (
    "fmt"
    "strings"
)

func main() {

    stringSlice := []string{"hello", "world"}

    stringByte := strings.Join(stringSlice, " ")

    // Byte array value
    fmt.Println([]byte(stringByte))

    // Corresponding string value
    fmt.Println(string([]byte(stringByte)))
}

산출:

[104 101108108111 32119111114108100] 안녕하세요 세계

링크 놀이터를 확인하십시오


답변

이를 위해 배열 특정 메소드를 작성했습니다. 각 int 유형에 대한 특정 메소드가 있는 인코딩 / 이진 패키지와 매우 유사합니다 . 예를 들면 binary.BigEndian.PutUint16([]byte, uint16).

func byte16PutString(s string) [16]byte {
    var a [16]byte
    if len(s) > 16 {
        copy(a[:], s)
    } else {
        copy(a[16-len(s):], s)
    }
    return a
}

var b [16]byte
b = byte16PutString("abc")
fmt.Printf("%v\n", b)

산출:

[0 0 0 0 0 0 0 0 0 0 0 0 0 97 98 99]

오른쪽이 아닌 왼쪽에 어떻게 패딩을 원했는지 확인하십시오.

http://play.golang.org/p/7tNumnJaiN