2017-11-20 2 views
0

나는 이해하려고 노력하는 간단한 코드 비트를 가지고 있지만 올바르게 작동하도록하는 방법을 고민하고 있습니다.Go에서 바이트의 조각에 바이트 배열을 추가하는 방법

일반적인 생각은 일부 데이터를 전달하고 바이트 배열로 변환하려는 것입니다. 그런 다음 바이트 배열의 길이를 내 바이트 슬라이스의 첫 번째 인덱스에 적용한 다음 바이트 배열을 슬라이스 끝에 추가하려고합니다.

이가 뭘하려 :

var slice []byte 
    myString := "Hello there" 

    stringAsByteArray := []byte(myString) //convert my string to byte array 


    slice[0] = byte(len(stringAsByteArray)) //length of string as byte array 

    append(slice, stringAsByteArray) 

그래서 아이디어는 slice의 첫 번째 바이트는 그에서에 다음 len(b)의 수를 포함하고, 일련의 바이트로 실제 문자열 메시지.

는하지만 난 얻을 : 예를 들어

cannot use stringAsByteArray (type []byte) as type byte in append 
append(slice, stringAsByteArray) evaluated but not used 
+0

: 문자열과 [] 바이트가 다른 종류 및 유형을 혼합 할 수 없습니다 추가로. 두 번째는 훨씬 더 근본적인 것입니다. 이 모든 것이 여기에서 설명 할 수있는 것보다 Tour of Go에서 훨씬 잘 설명됩니다. – Volker

+0

바이트 배열로 변환했기 때문에 바이트 배열을 추가한다고 생각했습니다. 내 슬라이스는 문자열이 아닌 바이트입니다. 바이트 배열에 바이트 배열을 추가 할 수없는 이유를 완전히 이해하지 못합니다. – Sir

+0

"바이트 배열에 바이트 배열을 추가 할 수없는 이유를 완전히 이해하지 못했습니다." 간단히'append'는 전형적으로이 append ([] T, T)와 비슷하게 작동하기 때문입니다. 슬라이스에 하나 이상의 요소를 추가하는 슬라이스를 슬라이스에 추가하지 마십시오. 슬라이스의 각 요소를 추가하려면 https://tour.golang.org/moretypes/15에서 매우 잘 설명되어있는 '...'을 사용하십시오. 참조 된 https://blog.golang.org/go- 슬라이스 - 사용 및 내부. – Volker

답변

1

,

package main 

import "fmt" 

func main() { 
    myString := "Hello there" 
    slice := make([]byte, 1, 1+len(myString)) 
    slice[0] = byte(len(myString)) 
    slice = append(slice, myString...) 
    fmt.Println(slice[0], string(slice[1:])) 
} 

출력 :

당신이 make 기능 슬라이스를 초기화해야 모든
11 Hello there 
+0

아, 그래서 바이트 배열에 바이트 배열을 추가하려는 시도가 논리적이지 않습니까? 나는 추가가 단지 2를 함께 붙일 것이다라고 생각했다. – Sir

+0

@Sir : 내 수정 된 답변을 참조하십시오. – peterSO

0
  1. 먼저
  2. 슬라이스에 데이터를 추가하려면 append 함수
  3. []byte에서 []byte까지 요소를 추가하려면 append 호출에서 스프레드 연산자를 사용할 수 있습니다.
  4. 은 마지막으로 당신은 기능 append를 호출 결과를 사용할 필요가
정확히 오류 컴파일러에 의해 인쇄 된 메시지와 불분명 무엇

https://play.golang.org/p/CP18akKsCa

+0

시작 부분이 아닌 슬라이스 끝 부분에 문자열의 길이를 추가하지 않습니까? 나는 처음에 그것을 얻으려고했다 :) – Sir

+0

당신은 약 \t'myString : = "Hello there"; slice : = make ([] byte, 0, len (myString) +1)'? * 길이 0 * 및 * 용량 len (문자열) + 1 *을 사용하여 슬라이스를 만듭니다. 이것은 문자열에서 바이트 배열을 생성하는 데 필요한 모든 메모리를 할당하기위한 작은 최적화입니다 + 첫 번째 바이트는 문자열 길이입니다. – RidgeA

관련 문제