191

[]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!

7
  • 8
    []byte can be converted directly to string. Please show an example of what problem you're having. Commented Nov 16, 2016 at 13:59
  • eg. file hash value to string for filename Commented Nov 17, 2016 at 2:21
  • 1
    If you just show us an example of what you tried, it would be a very easy question to answer, rather than waiting for us to guess the correct answer. Commented Nov 17, 2016 at 16:40
  • In most modern languages it would be perfectly clear what he was trying to do, sadly, and without any additional context needed. I also stumbled upon this question looking for the same answer (as answered below). Commented Nov 3, 2019 at 17:46
  • 1
    @JimB Byte arrays cannot be directly converted to a string. Only byte slices. Commented Mar 6, 2022 at 21:20

7 Answers 7

252

The easiest method I use to convert byte to string is:

myString := string(myBytes[:])
Sign up to request clarification or add additional context in comments.

3 Comments

Why the :? What's the difference between this answer and myString := string(myBytes)?
The : is needed because byte arrays cannot be directly turned to a string while slices can. Let's say we have var b [64]byte . string(b) will fail while string(b[:]) will work.
reminder that string(byteslice) does an allocation and a copy to clone the byte slice into the string's backing store
137

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)

2 Comments

Does the string contain a copy of the bytes?
Yes, it contains an immutable copy of the bytes.
17

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.

1 Comment

I have just try like this.but failed. In fact ,I need to convert a file sha1 value to string ,named for the filename
17

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)

https://play.golang.org/p/haChjjsH0-

3 Comments

While technically correct, it's rather unusual in Go to use var and declare every type without just inferring them. play.golang.org/p/JUl57LKfzk
Ah! "%x"! That's what I was doing wrong! :) I was using the wrong Sprintf placeholder, duh...
You could also use hex.EncodeToString instead of fmt.Sprintf("%x", ...).
4
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.

Comments

1

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.

1 Comment

Thanks a lot. EncodeToString returns the hexadecimal encoding of src.it works well.
0

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'}))

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.