首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将[]字节片转换为[]int片

将[]字节片转换为[]int片
EN

Stack Overflow用户
提问于 2021-12-16 11:57:37
回答 1查看 65关注 0票数 -3

下面的代码是做什么的:

它得到一个给定的URL和一个由随机数字组成的纯文本的响应。此时,数据是片[]字节,但我想使用这些数据,所以我认为最好的解决方案是将数据转换为片[]int。

我的密码来了:

代码语言:javascript
复制
func getRandomInt(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")

    resp, err := http.Get("https://www.random.org/integers/?num=5&min=1&max=10&col=1&base=10&format=plain&rnd=new")
    if err != nil {
        fmt.Println("No response from request")
    }

    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body) // response body is []byte

    if err != nil {
        fmt.Println(err)
    }

    err = json.Unmarshal(body, &bodyInt)

    if err != nil {
        fmt.Println(err)
    }

    //MY CONVERTER
    bodyInt := make([]int, len(body))
    for i, b := range body {
        bodyInt[i] = int(b)
    }

    js, err := json.Marshal(bodyInt)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    w.Write(js)
    fmt.Println("Endpoint Hit: getRandomInt")
}

我自己也试着做了一些改变。对于给定的URL,我应该在1到10的范围内得到5个数字。转换后得到的是10到60之间的10-11个数字。

我做了一些测试,当身体的结构如下,cnversion工作良好。

代码语言:javascript
复制
body = []byte{1, 2, 3, 4, 5}

所以我想我用一种不同的格式从url响应中读取数据,但是不知道如何解决这个问题。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-16 12:14:17

如果您curl该URL,您可以清楚地看到响应不是JSON,因此不应该将其视为JSON。

代码语言:javascript
复制
curl 'https://www.random.org/integers/?num=5&min=1&max=10&col=1&base=10&format=plain&rnd=new'
代码语言:javascript
复制
5
10
4
4
2

它只是一个新行分隔的整数列表,所以您应该这样对待它。

代码语言:javascript
复制
resp, err := http.Get("https://www.random.org/integers/?num=5&min=1&max=10&col=1&base=10&format=plain&rnd=new")
if err != nil {
    fmt.Println(err)
    return
}
defer resp.Body.Close()

body, err := io.ReadAll(resp.Body)
if err != nil {
    fmt.Println(err)
    return
}

lines := strings.Split(string(body), "\n")
numbers := []int{}
for i := range lines {
    line := strings.TrimSpace(lines[i])
    if line == "" {
        continue
    }

    num, err := strconv.Atoi(line)
    if err != nil {
        fmt.Println(err)
        return
    }
    
    numbers = append(numbers, num)
}

// do something with numbers
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70378625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档