pw_string: Add ByteSpan StringBuilder constructor

Adds a std::span<std::byte> constructor for StringBuilder to allow
construction of a StringBuilder on a byte array.

Change-Id: I1d665da4d72680dfe03eddf2554f22a9e51d57fa
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/15540
Reviewed-by: Wyatt Hepler <hepler@google.com>
Commit-Queue: Armando Montanez <amontanez@google.com>
diff --git a/pw_string/public/pw_string/string_builder.h b/pw_string/public/pw_string/string_builder.h
index 96a88ef..21769b3 100644
--- a/pw_string/public/pw_string/string_builder.h
+++ b/pw_string/public/pw_string/string_builder.h
@@ -89,6 +89,9 @@
   constexpr StringBuilder(std::span<char> buffer) : buffer_(buffer), size_(0) {
     NullTerminate();
   }
+  StringBuilder(std::span<std::byte> buffer)
+      : StringBuilder(
+            {reinterpret_cast<char*>(buffer.data()), buffer.size_bytes()}) {}
 
   // Disallow copy/assign to avoid confusion about where the string is actually
   // stored. StringBuffers may be copied into one another.
diff --git a/pw_string/string_builder_test.cc b/pw_string/string_builder_test.cc
index c36c748..d078299 100644
--- a/pw_string/string_builder_test.cc
+++ b/pw_string/string_builder_test.cc
@@ -276,7 +276,8 @@
 }
 
 TEST(StringBuilder, Format_Normal) {
-  StringBuffer<64> sb;
+  std::byte buffer[64];
+  StringBuilder sb(buffer);
   EXPECT_TRUE(sb.Format("0x%x", 0xabc).ok());
   EXPECT_STREQ("0xabc", sb.data());