How To Convert a Zero-Terminated Byte Array to a String in Go

Venter C.
jump to solution

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

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.

Sentry