diff --git a/common/platform/api/quiche_text_utils.h b/common/platform/api/quiche_text_utils.h
index 4de3647..5bc5f50 100644
--- a/common/platform/api/quiche_text_utils.h
+++ b/common/platform/api/quiche_text_utils.h
@@ -27,30 +27,6 @@
     quiche::QuicheTextUtilsImpl::RemoveLeadingAndTrailingWhitespace(data);
   }
 
-  // Returns true if |in| represents a valid uint64, and stores that value in
-  // |out|.
-  static bool StringToUint64(absl::string_view in, uint64_t* out) {
-    return quiche::QuicheTextUtilsImpl::StringToUint64(in, out);
-  }
-
-  // Returns true if |in| represents a valid int, and stores that value in
-  // |out|.
-  static bool StringToInt(absl::string_view in, int* out) {
-    return quiche::QuicheTextUtilsImpl::StringToInt(in, out);
-  }
-
-  // Returns true if |in| represents a valid uint32, and stores that value in
-  // |out|.
-  static bool StringToUint32(absl::string_view in, uint32_t* out) {
-    return quiche::QuicheTextUtilsImpl::StringToUint32(in, out);
-  }
-
-  // Returns true if |in| represents a valid size_t, and stores that value in
-  // |out|.
-  static bool StringToSizeT(absl::string_view in, size_t* out) {
-    return quiche::QuicheTextUtilsImpl::StringToSizeT(in, out);
-  }
-
   // Returns a new string representing |in|.
   static std::string Uint64ToString(uint64_t in) {
     return quiche::QuicheTextUtilsImpl::Uint64ToString(in);
diff --git a/common/platform/api/quiche_text_utils_test.cc b/common/platform/api/quiche_text_utils_test.cc
index bbea2cd..012d33d 100644
--- a/common/platform/api/quiche_text_utils_test.cc
+++ b/common/platform/api/quiche_text_utils_test.cc
@@ -32,89 +32,6 @@
   }
 }
 
-TEST_F(QuicheTextUtilsTest, StringToNumbers) {
-  const std::string kMaxInt32Plus1 = "2147483648";
-  const std::string kMinInt32Minus1 = "-2147483649";
-  const std::string kMaxUint32Plus1 = "4294967296";
-
-  {
-    // StringToUint64
-    uint64_t uint64_val = 0;
-    EXPECT_TRUE(quiche::QuicheTextUtils::StringToUint64("123", &uint64_val));
-    EXPECT_EQ(123u, uint64_val);
-    EXPECT_TRUE(quiche::QuicheTextUtils::StringToUint64("1234", &uint64_val));
-    EXPECT_EQ(1234u, uint64_val);
-    EXPECT_FALSE(quiche::QuicheTextUtils::StringToUint64("", &uint64_val));
-    EXPECT_FALSE(quiche::QuicheTextUtils::StringToUint64("-123", &uint64_val));
-    EXPECT_FALSE(
-        quiche::QuicheTextUtils::StringToUint64("-123.0", &uint64_val));
-    EXPECT_TRUE(
-        quiche::QuicheTextUtils::StringToUint64(kMaxUint32Plus1, &uint64_val));
-    EXPECT_EQ(4294967296u, uint64_val);
-  }
-
-  {
-    // StringToint
-    int int_val = 0;
-    EXPECT_TRUE(quiche::QuicheTextUtils::StringToInt("123", &int_val));
-    EXPECT_EQ(123, int_val);
-    EXPECT_TRUE(quiche::QuicheTextUtils::StringToInt("1234", &int_val));
-    EXPECT_EQ(1234, int_val);
-    EXPECT_FALSE(quiche::QuicheTextUtils::StringToInt("", &int_val));
-    EXPECT_TRUE(quiche::QuicheTextUtils::StringToInt("-123", &int_val));
-    EXPECT_EQ(-123, int_val);
-    EXPECT_FALSE(quiche::QuicheTextUtils::StringToInt("-123.0", &int_val));
-    if (sizeof(int) > 4) {
-      EXPECT_TRUE(
-          quiche::QuicheTextUtils::StringToInt(kMinInt32Minus1, &int_val));
-      EXPECT_EQ(-2147483649ll, int_val);
-      EXPECT_TRUE(
-          quiche::QuicheTextUtils::StringToInt(kMaxInt32Plus1, &int_val));
-      EXPECT_EQ(2147483648ll, int_val);
-    } else {
-      EXPECT_FALSE(
-          quiche::QuicheTextUtils::StringToInt(kMinInt32Minus1, &int_val));
-      EXPECT_FALSE(
-          quiche::QuicheTextUtils::StringToInt(kMaxInt32Plus1, &int_val));
-    }
-  }
-
-  {
-    // StringToUint32
-    uint32_t uint32_val = 0;
-    EXPECT_TRUE(quiche::QuicheTextUtils::StringToUint32("123", &uint32_val));
-    EXPECT_EQ(123u, uint32_val);
-    EXPECT_TRUE(quiche::QuicheTextUtils::StringToUint32("1234", &uint32_val));
-    EXPECT_EQ(1234u, uint32_val);
-    EXPECT_FALSE(quiche::QuicheTextUtils::StringToUint32("", &uint32_val));
-    EXPECT_FALSE(quiche::QuicheTextUtils::StringToUint32("-123", &uint32_val));
-    EXPECT_FALSE(
-        quiche::QuicheTextUtils::StringToUint32("-123.0", &uint32_val));
-    EXPECT_FALSE(
-        quiche::QuicheTextUtils::StringToUint32(kMaxUint32Plus1, &uint32_val));
-  }
-
-  {
-    // StringToSizeT
-    size_t size_t_val = 0;
-    EXPECT_TRUE(quiche::QuicheTextUtils::StringToSizeT("123", &size_t_val));
-    EXPECT_EQ(123u, size_t_val);
-    EXPECT_TRUE(quiche::QuicheTextUtils::StringToSizeT("1234", &size_t_val));
-    EXPECT_EQ(1234u, size_t_val);
-    EXPECT_FALSE(quiche::QuicheTextUtils::StringToSizeT("", &size_t_val));
-    EXPECT_FALSE(quiche::QuicheTextUtils::StringToSizeT("-123", &size_t_val));
-    EXPECT_FALSE(quiche::QuicheTextUtils::StringToSizeT("-123.0", &size_t_val));
-    if (sizeof(size_t) > 4) {
-      EXPECT_TRUE(
-          quiche::QuicheTextUtils::StringToSizeT(kMaxUint32Plus1, &size_t_val));
-      EXPECT_EQ(4294967296ull, size_t_val);
-    } else {
-      EXPECT_FALSE(
-          quiche::QuicheTextUtils::StringToSizeT(kMaxUint32Plus1, &size_t_val));
-    }
-  }
-}
-
 TEST_F(QuicheTextUtilsTest, Uint64ToString) {
   EXPECT_EQ("123", quiche::QuicheTextUtils::Uint64ToString(123));
   EXPECT_EQ("1234", quiche::QuicheTextUtils::Uint64ToString(1234));
diff --git a/common/quiche_data_reader.cc b/common/quiche_data_reader.cc
index 395d5c0..bbb4b87 100644
--- a/common/quiche_data_reader.cc
+++ b/common/quiche_data_reader.cc
@@ -6,6 +6,7 @@
 
 #include <cstring>
 
+#include "absl/strings/numbers.h"
 #include "absl/strings/string_view.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_logging.h"
 #include "net/third_party/quiche/src/common/platform/api/quiche_str_cat.h"
@@ -125,7 +126,7 @@
     return false;
   }
 
-  return QuicheTextUtils::StringToUint64(digits, result);
+  return absl::SimpleAtoi(digits, result);
 }
 
 absl::string_view QuicheDataReader::ReadRemainingPayload() {
