Golang中如何将ioutil.ReadAll返回的byte slice转换为整数数组
Go中把
ioutil.ReadAll返回的[]byte转换为整数数组的方案 你需要根据byte slice中存储的内容格式,选择对应的转换方式,常见场景及实现如下:
场景1:[]byte存储的是二进制整数数据
1.1 直接取每个字节的整数值(8位)
Go中byte本身就是uint8的别名,如果你要的是每个字节对应的无符号8位整数,可直接零拷贝转换:
uint8Array := []uint8(body)
如果需要转成[]int类型,遍历赋值即可:
intArray := make([]int, len(body)) for idx, b := range body { intArray[idx] = int(b) }
1.2 字节序列是多字节整数(如int32、uint64等,按固定字节序存储)
需要用encoding/binary包处理字节序,示例为将小端序存储的字节流转为[]int32数组:
import "encoding/binary" // 先校验长度是否匹配:每个int32占4字节 if len(body)%4 != 0 { // 自行处理长度不匹配的异常逻辑 } int32Array := make([]int32, 0, len(body)/4) for i := 0; i < len(body); i += 4 { val := int32(binary.LittleEndian.Uint32(body[i:i+4])) int32Array = append(int32Array, val) }
如果是大端序存储,把binary.LittleEndian替换为binary.BigEndian即可,其他整数类型可对应调整步长和调用的转换方法。
场景2:[]byte存储的是可读字符串格式的整数
如果body里是JSON数组、逗号分隔的数字字符串这类人类可读的格式,需要先转字符串再解析:
2.1 解析JSON格式的整数数组
import "encoding/json" var intArray []int err := json.Unmarshal(body, &intArray) if err != nil { // 自行处理解析异常逻辑 }
2.2 解析指定分隔符分隔的数字字符串
比如body内容是"1,2,3,4"这类逗号分隔的数字:
import ( "strconv" "strings" ) // 先转成字符串再按分隔符拆分 strContent := string(body) strParts := strings.Split(strContent, ",") // 可替换为实际的分隔符,如空格、换行符 intArray := make([]int, 0, len(strParts)) for _, item := range strParts { // 可选:去除空白字符 item = strings.TrimSpace(item) num, err := strconv.Atoi(item) if err != nil { // 自行处理非数字格式的异常逻辑,也可以直接跳过 continue } intArray = append(intArray, num) }
内容的提问来源于stack exchange,提问作者Palu
相关产品推荐
相关产品推荐

