go语言byte数组转换 go字符串转byte

golang 中结构体与字节数组能相互转化么结构体与[]byte不能直接转化,可以通过gob来转换 。
编码时如下,假设默认的结构体为data
func Encode(data interface{}) ([]byte, error) {buf := bytes.NewBuffer(nil)enc := gob.NewEncoder(buf)err := enc.Encode(data)if err != nil {return nil, err}return buf.Bytes(), nil}解码时如下,data为需要解码的字节数组,to为相应的接收结构体,记住to的结构体结构应与被编码的data相一致,解码后内容保存在to里面,直接使用to即可
func Decode(data []byte, to interface{}) error {buf := bytes.NewBuffer(data)dec := gob.NewDecoder(buf)return dec.Decode(to)}使用的时候:
b, err := Encode(data)if err != nil {//错误处理 }if err := Decode(b, to); err != nil {//错误处理}
如何将golangbyte转换为字符串func BytesToString(bs []byte) string {
l := len(bs)
buf := make([]string, 0, l)
for i := 0; il; i++ {
buf = appendString(buf, bs[i])
}
return strings.Join(buf, dot)
}
func appendString(bs []string, b byte) []string {
var a byte
var s int
for i := 0; i8; i++ {
a = b
b = 1
b = 1
switch a {
case b:
s += 0
default:
temp := 1
for j := 0; j7 - i; j++ {
temp = temp*2
}
s += temp
}
b = 1
}
return append(bs, strconv.Itoa(s))
}
如何将任意Golang接口转换为字节数组golang语言本身就是c的工具集go语言byte数组转换,开发c的程序用到的大部分结构体,内存管理,携程等,golang基本都有,go语言byte数组转换他只是在这个基础上又加了一些概念这里说一个很小的问题,就是字节数组转string的问题,网上大部分都是这样转的(包括google上)go语言byte数组转换:string(p[:]),这个转完了是有问题的 , go语言byte数组转换我们再来看一下string这个结构体go语言byte数组转换:
struct String
{
byte*str;
intgolen;
};
这个结构体让我想起了nginx的string,他是这样定义的:
typedef struct {
size_tlen;
u_char*data;
} ngx_str_t;
golang里边 string的概念其实不是以前遇到\0结尾的概念了,他其实就是一块连续的内存,首地址+长度,上面那样赋值,如果p里边有\0 , 他不会做处理这个时候,如果再对这个string做其他处理就可能出问题了 , 比如strconv.Atoi转成int就有错误,解决办法就是需要自己写一个正规的转换函数:
func byteString(p []byte) string {
【go语言byte数组转换 go字符串转byte】for i := 0; ilen(p); i++ {
if p[i] == 0 {
return string(p[0:i])
}
}
return string(p)
}
这样就不会出问题了
关于go语言byte数组转换和go字符串转byte的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读