英文:
How to convert byte array to string in Go
问题
[]byte
转换为字符串会引发错误。
string([]byte[:n])
也会引发错误。
顺便问一下,例如将sha1值转换为文件名的字符串。
是否需要显式设置utf-8或其他编码?
谢谢!
英文:
[]byte
to string raises an error.
string([]byte[:n])
raises an error too.
By the way, for example, sha1 value to string for filename.
Does it need utf-8 or any other encoding set explicitly?
Thanks!
答案1
得分: 176
我用来将 byte
转换为 string
的最简单方法是:
myString := string(myBytes[:])
英文:
The easiest method I use to convert byte
to string
is:
myString := string(myBytes[:])
答案2
得分: 102
在Go语言中,将[]byte
转换为string
的最简单方法是:
myString := string(myBytes)
注意:如果你要将一个"sha1 value to string"转换,首先需要对其进行编码,因为哈希值是二进制的。SHA哈希值的传统编码方式是十六进制(import "encoding/hex"
):
myString := hex.EncodeToString(sha1bytes)
英文:
The easiest way to convert []byte
to string
in Go:
myString := string(myBytes)
Note: to convert a "sha1 value to string" like you're asking, it needs to be encoded first, since a hash is binary. The traditional encoding for SHA hashes is hex (import "encoding/hex"
):
myString := hex.EncodeToString(sha1bytes)
答案3
得分: 16
在Go语言中,你可以通过string(bytes)
将字节数组(utf-8编码)转换为字符串。所以在你的例子中,应该是string(byte[:n])
,假设byte
是一个字节切片。
英文:
In Go you convert a byte array (utf-8) to a string by doing string(bytes)
so in your example, it should be string(byte[:n])
assuming byte
is a slice of bytes.
答案4
得分: 15
我不确定我是否正确理解了问题,但可能是这样的:
var ab20 [20]byte = sha1.Sum([]byte("filename.txt"))
var sx16 string = fmt.Sprintf("%x", ab20)
fmt.Print(sx16)
链接:https://play.golang.org/p/haChjjsH0-
英文:
I am not sure that i understand question correctly, but may be:
var ab20 [20]byte = sha1.Sum([]byte("filename.txt"))
var sx16 string = fmt.Sprintf("%x", ab20)
fmt.Print(sx16)
答案5
得分: 4
ToBe := [6]byte{65, 66, 67, 226, 130, 172}
s := ToBe[:3]
// 这样可以工作
fmt.Printf("%s", string(s))
// 这样不行
fmt.Printf("%s", string(ToBe))
区别:ToBe 是一个数组,而 s 是一个切片。
<details>
<summary>英文:</summary>
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))
Difference : ToBe is an array whereas s is a slice.
</details>
# 答案6
**得分**: 1
首先,你之所以得到这些负面评价,是因为你没有提供任何代码。
其次,没有一个好的示例。这是我会做的:
```go
var Buf bytes.Buffer
Buf.Write([]byte)
myString := Buf.String()
Buf.Reset() // 重置缓冲区以便以后重用
或者更好的是:
myString := string(someByteArray[:n])
在这里也可以查看这里,还可以看看@JimB的评论。
话虽如此,如果你需要针对你的程序的帮助,请提供你尝试过的示例、期望的结果和错误信息。
英文:
First you're getting all these negatives reviews because you didn't provided any code.
Second, without a good example. This is what i'd do
var Buf bytes.Buffer
Buf.Write([]byte)
myString := Buf.String()
Buf.Reset() // Reset the buffer to reuse later
or better yet
myString := string(someByteArray[:n])
see here also see @JimB's comment
That being said if you help that targets your program, please provide and example of what you've tried, the expect results, and error.
答案7
得分: 0
我们只能猜测你的代码有什么问题,因为没有提供有意义的示例。但首先我看到string([]byte[:n])
根本不是有效的。[]byte[:n]
不是一个有效的表达式,因为没有为数组分配内存。由于字节数组可以直接转换为字符串,我假设你只是有一个语法错误。
最简短的有效写法是fmt.Println(string([]byte{'g', 'o'}))
。
英文:
We can just guess what is wrong with your code because no meaningful example is provided. But first what I see that string([]byte[:n])
is not valid at all. []byte[:n]
is not a valid expression because no memory allocated for the array. Since byte array could be converted to string directly I assume that you have just a syntax error.
Shortest valid is fmt.Println(string([]byte{'g', 'o'}))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论