如何将int[]转换为uint8[]

huangapple go评论82阅读模式
英文:

How to convert int[] to uint8[]

问题

所以,我需要你的帮助。我在那个主题上找不到任何东西。Golang是一种新近开发的语言,所以对于像我这样的新手来说,很难快速找到答案。

英文:

SO, I need your help. I couldn’t find anything on that topic. Golang is a freshly baked language so it’s quite hard to find answers quick for a newcomers like me.

答案1

得分: 5

预定义的Go int类型的大小是与实现相关的,可以是32位或64位(数字类型)。

这里有一个将大端序的int转换为byteuint8)的示例。

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]
英文:

The predeclared Go int type size is implementation-specific, either 32 or 64 bits (Numeric types).

Here's an example of converting big-endian ints to bytes (uint8s).

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))
}

Output:

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]

or

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]

huangapple
  • 本文由 发表于 2011年8月6日 06:02:27
  • 转载请务必保留本文链接:https://go.coder-hub.com/6963078.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定