如何将golangbyte转换为字符串

Python014

如何将golangbyte转换为字符串,第1张

func BytesToString(bs []byte) string {

l := len(bs)

buf := make([]string, 0, l)

for i := 0i <li++ {

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 := 0i <8i++ {

a = b

b <<= 1

b >>= 1

switch a {

case b:

s += 0

default:

temp := 1

for j := 0j <7 - ij++ {

temp = temp*2

}

s += temp

}

b <<= 1

}

return append(bs, strconv.Itoa(s))

}

本文主要介绍了Go语言中文件读写的相关操作。

文件是什么?

计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件。

os.Open() 函数能够打开一个文件,返回一个 *File 和一个 err 。对得到的文件实例调用 close() 方法能够关闭文件。

为了防止文件忘记关闭,我们通常使用defer注册文件关闭语句。

Read方法定义如下:

它接收一个字节切片,返回读取的字节数和可能的具体错误,读到文件末尾时会返回 0 和 io.EOF 。 举个例子:

使用for循环读取文件中的所有数据。

bufio是在file的基础上封装了一层API,支持更多的功能。

io/ioutil 包的 ReadFile 方法能够读取完整的文件,只需要将文件名作为参数传入。

os.OpenFile() 函数能够以指定模式打开文件,从而实现文件写入相关功能。

其中:

name :要打开的文件名 flag :打开文件的模式。 模式有以下几种:

perm :文件权限,一个八进制数。r(读)04,w(写)02,x(执行)01。

golang语言本身就是c的工具集,开发c的程序用到的大部分结构体,内存管理,携程等,golang基本都有,他只是在这个基础上又加了一些概念这里说一个很小的问题,就是字节数组转string的问题,网上大部分都是这样转的(包括google上):string(p[:]),这个转完了是有问题的,我们再来看一下string这个结构体:

struct String

{

byte* str

intgo len

}

这个结构体让我想起了nginx的string,他是这样定义的:

typedef struct {

size_t len

u_char *data

} ngx_str_t

golang里边 string的概念其实不是以前遇到\0结尾的概念了,他其实就是一块连续的内存,首地址+长度,上面那样赋值,如果p里边有\0,他不会做处理这个时候,如果再对这个string做其他处理就可能出问题了,比如strconv.Atoi转成int就有错误,解决办法就是需要自己写一个正规的转换函数:

func byteString(p []byte) string {

for i := 0i <len(p)i++ {

if p[i] == 0 {

return string(p[0:i])

}

}

return string(p)

}

这样就不会出问题了