gpt4 book ai didi

string - 修复了 byte slice 到字符串的转换——忽略空值

转载 作者:IT王子 更新时间:2023-10-29 02:10:13 28 4
gpt4 key购买 nike

有没有一种有效的方法可以在不向字符串中添加空字符的情况下将固定字节 slice 转换为字符串?

从字节 slice 转换成字符串的传统方法如下:

out := string(b[STRIDX:STRIDX+STRLEN]) 

虽然这会返回一个字符串,但长度始终等于字节 slice 长度。因此,虽然该字符串在 Print 语句中看起来很正常,但它仍然引用潜在的空值。如果您将字符附加到该字符串,这会产生一些非常奇怪的效果。

现在我扫描 byte slice 以查找空值以限制我提供给 string 的 byte slice 。不是很漂亮或效率不高。

示例:https://play.golang.org/p/hOoaqCOoFl0

最佳答案

写一个简单的函数:

func CToGoString(b []byte) string {
i := bytes.IndexByte(b, 0)
if i < 0 {
i = len(b)
}
return string(b[:i])
}

以你的例子为例,

package main

import (
"bytes"
"fmt"
)

func CToGoString(b []byte) string {
i := bytes.IndexByte(b, 0)
if i < 0 {
i = len(b)
}
return string(b[:i])
}

const (
BUFLEN = 50
STRLEN = 10
STRIDX = 10
)

func main() {
test := "test"
b := [BUFLEN]byte{}
fmt.Printf("Original\n\tString: '%+v' with length '%d'\n", test, len(test))

copy(b[10:], []byte(test))

s := CToGoString(b[STRIDX : STRIDX+STRLEN])
fmt.Printf("Unpacking with []byte()\n\tString: '%+v' with length '%d' Buf:%+v\n", s, len(s), []byte(s))
}

Playground :https://play.golang.org/p/mH3CBdM6eG_l

输出:

Original
String: 'test' with length '4'
Unpacking with []byte()
String: 'test' with length '4' Buf:[116 101 115 116]

关于string - 修复了 byte slice 到字符串的转换——忽略空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48833106/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com