Ema*_*uel 65 byte tcp client-server type-conversion go
我需要通过TCP创建一个客户端 - 服务器示例.在客户端,我读了2个数字,然后将它们发送到服务器.我遇到的问题是我无法转换[]byte为int,因为通信只接受类型的数据[]byte.
有没有办法转换[]byte为int或我可以发送int到服务器?
一些示例代码将非常感激.
谢谢.
Dav*_*rth 68
(转发这个答案)
您可以使用encoding/binary的ByteOrder为16,32,64位类型执行此操作
package main
import "fmt"
import "encoding/binary"
func main() {
var mySlice = []byte{244, 244, 244, 244, 244, 244, 244, 244}
data := binary.BigEndian.Uint64(mySlice)
fmt.Println(data)
}
Run Code Online (Sandbox Code Playgroud)
Den*_*ret 11
从字节数组开始,您可以使用二进制包进行转换.
例如,如果您想要读取整数:
buf := bytes.NewBuffer(b) // b is []byte
myfirstint, err := binary.ReadVarint(buf)
anotherint, err := binary.ReadVarint(buf)
Run Code Online (Sandbox Code Playgroud)
同一个包允许使用常规的Read函数读取带有所需字节顺序的unsigned int或float .
提供了一种将二进制切片转换为数字游乐场的math/big简单方法
package main
import (
"fmt"
"math/big"
)
func main() {
b := []byte{0x01, 0x00, 0x01}
v := int(big.NewInt(0).SetBytes(b).Uint64())
fmt.Printf("%v", v)
}
Run Code Online (Sandbox Code Playgroud)
对于从/到字节序列编码/解码数字,有编码/二进制包.文档中有一些示例:请参阅目录中的"示例"部分.
这些编码功能在io.Writer接口上运行.该net.TCPConn类型实现io.Writer,所以你可以写/直接读取到的网络连接.
如果你在连接的任何一侧有一个Go程序,你可能想看看使用编码/ gob.有关使用gob的演练,请参阅文章" Gobs of data "(跳到底部查看自包含的示例).
如果[] byte是ASCII字节数字,则首先将[] byte转换为字符串,然后使用将字符串转换为int 的strconvpackage Atoi方法。
package main
import (
"fmt"
"strconv"
)
func main() {
byteNumber := []byte("14")
byteToInt, _ := strconv.Atoi(string(byteNumber))
fmt.Println(byteToInt)
}
Run Code Online (Sandbox Code Playgroud)
去操场-https: //play.golang.org/p/gEzxva8-BGP
now := []byte{0xFF,0xFF,0xFF,0xFF}
nowBuffer := bytes.NewReader(now)
var nowVar uint32
binary.Read(nowBuffer,binary.BigEndian,&nowVar)
fmt.Println(nowVar)
Run Code Online (Sandbox Code Playgroud)
4294967295
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
87849 次 |
| 最近记录: |