3
안녕하세요. 나는 그 주제에 대해 아무 것도 찾을 수 없었다. Golang은 갓 구운 언어이므로 나 같은 새 이주자가 빨리 답변을 찾을 수 있습니다.int []을 (를) uint8 []으로 변환하는 방법
안녕하세요. 나는 그 주제에 대해 아무 것도 찾을 수 없었다. Golang은 갓 구운 언어이므로 나 같은 새 이주자가 빨리 답변을 찾을 수 있습니다.int []을 (를) uint8 []으로 변환하는 방법
미리 정의 된 Go int
유형 크기는 구현에 따라 32 비트 또는 64 비트 (Numeric types)입니다.
다음은 빅 엔디안 int
을 byte
(uint8
초)으로 변환하는 예입니다.
package main
import (
"encoding/binary"
"fmt"
"reflect"
)
func IntsToBytesBE(i []int) []byte {
intSize := int(reflect.TypeOf(i).Elem().Size())
b := make([]byte, intSize*len(i))
for n, s := range i {
switch intSize {
case 64/8:
binary.BigEndian.PutUint64(b[intSize*n:], uint64(s))
case 32/8:
binary.BigEndian.PutUint32(b[intSize*n:], uint32(s))
default:
panic("unreachable")
}
}
return b
}
func main() {
i := []int{0, 1, 2, 3}
fmt.Println("int size:", int(reflect.TypeOf(i[0]).Size()), "bytes")
fmt.Println("ints:", i)
fmt.Println("bytes:", IntsToBytesBE(i))
}
출력 :
int size: 4 bytes
ints: [0 1 2 3]
bytes: [0 0 0 0 0 0 0 1 0 0 0 2 0 0 0 3]
또는
int size: 8 bytes
ints: [0 1 2 3]
bytes: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 3]
내가 훨씬 덜 복잡 예를 기대하고 있었다 (때문에 내 블라인드로는 이동이 작업의 이러한 종류의 루틴의 일종을 가지고 있다고 생각합니다). 그러나 당신의 본보기는 저에게 완벽하게 잘되었습니다. 감사합니다. – oddy
'int'타입은 32 비트로 보장되지 않는다. 이는 구현에 따라 다릅니다. 현재 Go 컴파일러는 모두 가지고 있지만, 언어 명세에서는 그것을 요구하지 않으므로'uint32'로 변환 할 때 조심해야합니다. * 데이터 손실이있을 수 있습니다. – jimt
명시 적으로 크기가 정해진 정수를 사용할 때 성가신 코드를 적게 쓰는 것도 가능합니다. 바이너리 .BigEndian.PutUint32를 루프에서 호출하는 대신 binary.Write를 사용할 수 있습니다. –