[]byte
转为字符串会引发错误。
string([]byte[:n])
也会引发错误。
另外,例如将 SHA1 值转换为文件名时,需要显式设置 UTF-8 或其他编码吗?
谢谢!
我用的最简单的将 byte
转换为 string
的方法是:
myString := string(myBytes[:])
:
?这个答案和myString := string(myBytes)
有什么不同? - Ferran Maylinch:
是因为字节数组无法直接转换为字符串,而切片可以。假设我们有 var b [64]byte
,string(b)
将会失败,但是 string(b[:])
就能成功转换。 - MKrup在Go语言中将[]byte
转换为string
最简单的方法:
myString := string(myBytes)
注意:如果要将像您询问的"sha1值转换为字符串",需要首先进行编码,因为哈希是二进制的。 SHA哈希的传统编码是十六进制(import "encoding/hex"
):
myString := hex.EncodeToString(sha1bytes)
string(bytes)
,因此在您的示例中,假设byte
是一个字节切片,则应该使用string(byte[:n])
。我不确定我是否正确理解了问题,但也许是这样:
var ab20 [20]byte = sha1.Sum([]byte("filename.txt"))
var sx16 string = fmt.Sprintf("%x", ab20)
fmt.Print(sx16)
var
并声明每个类型而不仅仅是推断它们是相当不寻常的。https://play.golang.org/p/JUl57LKfzk - JimBhex.EncodeToString
代替 fmt.Sprintf("%x", ...)
。 - OlshanskyToBe := [6]byte{65, 66, 67, 226, 130, 172}
s:=ToBe[:3]
// this will work
fmt.Printf("%s",string(s))
// this will not
fmt.Printf("%s",string(ToBe))
区别: ToBe是一个数组,而s是一个切片。
首先,你之前没有提供任何代码,这就是为什么会收到这些负面评论的原因。 其次,没有一个好的示例。这就是我所做的。
var Buf bytes.Buffer
Buf.Write([]byte)
myString := Buf.String()
Buf.Reset() // Reset the buffer to reuse later
myString := string(someByteArray[:n])
请 在这里 查看,同时也请参考 @JimB 的评论。
话虽如此,如果您需要针对程序的帮助,请提供您尝试过的示例、期望的结果和错误信息。
string([]byte[:n])
根本无效。[]byte[:n]
不是一个有效的表达式,因为没有为数组分配内存。由于字节数组可以直接转换为字符串,我认为您只是遇到了语法错误。
最短有效的解决方案是:fmt.Println(string([]byte{'g', 'o'}))
[]byte
可以直接转换为string
。请给出一个例子说明您遇到的问题。 - JimB