How To Convert a Zero-Terminated Byte Array to a String in Go
The Problem
When working with C libraries or system calls in Go, you encounter a zero-terminated byte array.
The Solution
A zero-terminated byte array is a sequence of bytes that end with a null byte (0x00). This is a common way to represent strings in C, using a null byte to mark the end of a string.
You can use the bytes.IndexByte function to find the position of the null byte, then use the string type conversion to convert the byte array to a string.
Consider the following example:
package main
import (
"bytes"
"fmt"
)
func ZeroTerminatedToString(byteArray []byte) string {
nullIndex := bytes.IndexByte(byteArray, 0) // Find the first occurrence of the null byte (\x00)
if nullIndex == -1 {
return string(byteArray) // No null terminator found, convert entire slice
}
return string(byteArray[:nullIndex]) // Slice up to the null terminator
}
func main() {
// Example byte array with a zero-terminator
byteArray := []byte{'H', 'e', 'l', 'l', 'o', 0, 'W', 'o', 'r', 'l', 'd'}
str := ZeroTerminatedToString(byteArray)
fmt.Println(str)
}
This returns the following output:
Hello
This approach ensures that only the first part of the byte array, up to the first zero byte, is considered. If your input is guaranteed to have a null terminator, this function will safely extract the intended string.
Further reading
- The Go
bytespackage documentation - The Go
IndexBytesfunction documentation
Considered "not bad" by 4 million developers and more than 150,000 organizations worldwide, Sentry provides code-level observability to many of the world's best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.