Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Go中将字节数组转换为字符串_Go_Types_Sha1 - Fatal编程技术网

如何在Go中将字节数组转换为字符串

如何在Go中将字节数组转换为字符串,go,types,sha1,Go,Types,Sha1,[]字节到字符串将引发错误。 字符串([]字节[:n])也会引发错误。 顺便说一下,例如,sha1值转换为字符串作为文件名。 它是否需要utf-8或任何其他明确的编码集? 谢谢 在Go中,通过执行string(bytes)将字节数组(utf-8)转换为字符串,因此在您的示例中,它应该是string(byte[:n])假设byte是一个字节片。首先,您会得到所有这些负面评论,因为您没有提供任何代码。 第二,没有一个好的例子。这就是我要做的 var Buf bytes.Buffer Buf.Writ

[]字节
到字符串将引发错误。
字符串([]字节[:n])
也会引发错误。 顺便说一下,例如,sha1值转换为字符串作为文件名。 它是否需要utf-8或任何其他明确的编码集?
谢谢

在Go中,通过执行
string(bytes)
将字节数组(utf-8)转换为字符串,因此在您的示例中,它应该是
string(byte[:n])
假设
byte
是一个字节片。

首先,您会得到所有这些负面评论,因为您没有提供任何代码。 第二,没有一个好的例子。这就是我要做的

var Buf bytes.Buffer
Buf.Write([]byte)
myString := Buf.String()
Buf.Reset() // Reset the buffer to reuse later
或者更好

myString := string(someByteArray[:n])
另见@JimB的评论


也就是说,如果您帮助确定您的计划目标,请提供您尝试过的内容、预期结果和错误的示例。

我不确定我是否正确理解了问题,但可能是:

var ab20 [20]byte = sha1.Sum([]byte("filename.txt"))
var sx16 string = fmt.Sprintf("%x", ab20)
fmt.Print(sx16)

字节
转换为
字符串
最简单的方法是:

myString := string(myBytes[:])

因为没有提供有意义的示例,所以我们只能猜测代码的错误。但首先我看到的是
字符串([]字节[:n])
根本无效<代码>[]字节[:n]不是有效的表达式,因为没有为数组分配内存。由于字节数组可以直接转换为字符串,所以我假设您有一个语法错误


最短有效的是
fmt.Println(字符串([]字节{'g','o'}))
在Go中将
[]字节
转换为
字符串的最简单方法:

myString := string(myBytes)

注意:要像您要求的那样将“sha1值转换为字符串”,需要首先对其进行编码,因为哈希是二进制的。SHA哈希的传统编码是十六进制(
import“encoding/hex”
):


区别:ToBe是一个数组,而s是一个片。

[]字节
可以直接转换为
字符串
。请举例说明你遇到了什么问题。如果您只是向我们展示一个您尝试过的示例,那么这将是一个非常容易回答的问题,而不是等待我们猜测正确的答案。在大多数现代语言中,很遗憾,在没有任何额外上下文需要的情况下,他想做的事情将非常清楚。我也无意中发现了这个问题,寻找相同的答案(如下所示)。我只是这样尝试过。但失败了。事实上,我需要将文件sha1值转换为字符串,以文件名命名,非常感谢。EncodeToString返回src的十六进制编码。它工作得很好。虽然在技术上是正确的,但在使用
var
并声明每一种类型而不只是推断它们时,这是非常罕见的。啊!!“%x”!这就是我做错的地方!:)我使用了错误的Sprintf占位符,duh…太棒了,在golang中将字节编码为字符串非常方便!
myString := hex.EncodeToString(sha1bytes)
ToBe := [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))