Tcp 如何在Go编程中从[]字节转换为int

Tcp 如何在Go编程中从[]字节转换为int,tcp,client-server,byte,type-conversion,go,Tcp,Client Server,Byte,Type Conversion,Go,我需要通过TCP创建一个客户机-服务器示例。在客户端,我读取2个数字,然后将它们发送到服务器。我面临的问题是,我无法将[]字节转换为int,因为通信只接受[]字节类型的数据 有没有办法将[]字节转换为int或者我可以将int发送到服务器 一些示例代码将非常受欢迎 谢谢。从字节数组开始,您可以使用进行转换 例如,如果您想读取整数: buf := bytes.NewBuffer(b) // b is []byte myfirstint, err := binary.ReadVarint(buf) a

我需要通过TCP创建一个客户机-服务器示例。在客户端,我读取2个数字,然后将它们发送到服务器。我面临的问题是,我无法将
[]字节
转换为
int
,因为通信只接受
[]字节
类型的数据

有没有办法将
[]字节
转换为
int
或者我可以将
int
发送到服务器

一些示例代码将非常受欢迎


谢谢。

从字节数组开始,您可以使用进行转换

例如,如果您想读取整数:

buf := bytes.NewBuffer(b) // b is []byte
myfirstint, err := binary.ReadVarint(buf)
anotherint, err := binary.ReadVarint(buf)

同一个包允许使用通用函数读取具有所需字节顺序的无符号int或float。

对于编码/解码字节序列中的数字,有一个包。文档中有示例:请参阅目录中的示例部分

这些编码函数在接口上运行。该类型实现io.Writer,因此您可以直接写入/读取网络连接

如果您在连接的任一侧都有一个Go程序,您可能需要考虑使用。有关使用gob的演练,请参阅文章“”(跳到底部查看一个独立的示例)。

(重新发布)

对于16位、32位和64位类型,您可以使用编码/二进制来执行此操作

var bs[]字节
值:=strconv.ParseInt(字符串(bs),10,64)

如果[]字节是ASCII字节数,则首先将[]字节转换为字符串,并使用将字符串转换为int的
strconv
package
Atoi
方法

package main
import (
    "fmt"
    "strconv"
)

func main() {
    byteNumber := []byte("14")
    byteToInt, _ := strconv.Atoi(string(byteNumber))
    fmt.Println(byteToInt)
}
去操场-

现在:=[]字节{0xFF,0xFF,0xFF,0xFF}
nowBuffer:=字节。NewReader(现在)
var nowVar uint32
Read(nowBuffer、binary.BigEndian和nowVar)
fmt.Println(nowVar)
4294967295

你能举一个如何在TCP应用程序中使用gob的例子吗?我添加了一个描述gob的文章的链接;如果只想查看代码示例,可以跳到底部。构造编码器/解码器时,只需将
*TCPConn
作为参数传递给
gob.NewEncoder
/
gob.NewDecoder
。为了澄清任务,您是否同时编写客户端和服务器代码?和都是用Go?AFAIK编写的,您必须进行位移位。要将数据发送到网络,它需要以字节形式。Varint专门用于协议缓冲区,可能不是您想要的。规格:只是澄清一下,一个32位整数在经过Varint编码后可能会使用最多5个字节。这不适用于OP的用例。改用binary.Read()。看:你说的偏移是什么意思?例如,从[]字节的中间读取?只需执行BigEndian.Uint64(bigSlice[10:18])(基本上,读取片断中间的字节。或者,你是说别的什么吗?),我问过这个愚蠢的问题。我不能编辑它:D。谢谢。它返回uint 16,uint 32,unIT64但不int。需要从显而易见的UntType转换到int,但是当刚要去字节[]时不是首先。to int:这不适用于字节数组非常小的情况。在我的一个例子中,我有一个只有2个元素的字节数组,而
Uint64
方法在source
=b[7]中的这一行失败//编译器的边界检查提示;请参见golang.org/issue/14808
,因为索引显然超出了边界。我需要
Uint16
方法。@Tinkalgogogo使用int64(值)将值转换为int64。这可能需要大量投票,因为没有解释,它返回int64而不是int64。如果您想要int64(我知道)这是一种有效的方法吗?到字符串的转换似乎是一种冗余。此答案与询问者的意图不符。这将读取字节序列,将其解释为字符,并查看这些字符是否包含数字。从4个字节返回的最大值为“9999”。询问者在一个切片中有4个字节,其中,w组合后,表示一个4字节的整数,并想知道提取其中整数的最简单方法。这可能会返回-2^31到2^31-1之间的结果。将int解析为字符串,然后再解析为字节数组并反转看起来太长了是的,字节到int的代价会更低,但还没有找到方法。
package main
import (
    "fmt"
    "strconv"
)

func main() {
    byteNumber := []byte("14")
    byteToInt, _ := strconv.Atoi(string(byteNumber))
    fmt.Println(byteToInt)
}