字节数组转字符串的求助

我看你有戏 2016-09-30 07:49:06
var ary_buff [20]byte
copy(ary_buff[0:],[]byte{'a','b','c','d',0,'e','f','g','h'} )
str := string(ary_buff[0:])
fmt.Println(str,len(str))


结果
abcd efgh 20

有啥办法让sring的长度在转换的时候变为4 ,只显示abcd ,之前用c++写代码,字符串都是到0截止的,go好像有点不一样哦

希望有个通用的办法,或是函数,谢谢


...全文
139 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
svenwang 2016-10-02
  • 打赏
  • 举报
回复
不需要copy的,[]byte转成string就有内存复制了。
我看你有戏 2016-10-02
  • 打赏
  • 举报
回复

package main
import  "fmt" //引入fmt库
//import   "bytes"

func CString(b []byte) string {
    index := -1
    for i, ch := range b {
        if ch == 0 {
            index = i
            break
        }
    }
    if index >= 0 {
        return string(b[:index])
    }
    return string(b)
}


func main() {
    var ary_buff [8]byte
	copy(ary_buff[0:], []byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'})
	/*p := bytes.IndexByte(ary_buff[:], 0)
	fmt.Println("p=",p)
	str := string(ary_buff[0:p])
	fmt.Println(str, len(str))
	*/

	fmt.Println ( CString(ary_buff[0:]) )
}


以上代码,二楼的朋友那个会报错,三楼还可以,考虑的比较全面,先谢谢了
svenwang 2016-10-02
  • 打赏
  • 举报
回复

func CString(b []byte) string {
	index := -1
	for i, ch := range b {
		if ch == 0 {
			index = i
			break
		}
	}
	if index >= 0 {
		return string(b[:index])
	}
	return string(b)
}

func main() {
	b := []byte{'a', 'b', 'c', 'd', 0, 'e', 'f', 'g', 'h'}
	str := CString(b)
	fmt.Println(str, len(str))
}
pathletboy 2016-10-01
  • 打赏
  • 举报
回复
	var ary_buff [20]byte
	copy(ary_buff[0:], []byte{'a', 'b', 'c', 'd', 0, 'e', 'f', 'g', 'h'})
	p := bytes.IndexByte(ary_buff[:], 0)
	str := string(ary_buff[0:p])
	fmt.Println(str, len(str))

2,190

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • Freeman Z
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧