diff --git a/src/common/UtilAll.h b/src/common/UtilAll.h
index 4f34419..ec4ea30 100644
--- a/src/common/UtilAll.h
+++ b/src/common/UtilAll.h
@@ -41,6 +41,7 @@
 #include <fstream>
 #include <map>
 #include <sstream>
+#include <type_traits>
 #include "RocketMQClient.h"
 
 using namespace std;
@@ -93,6 +94,43 @@
 #define SIZET_FMT "%zu"
 #endif
 
+namespace detail {
+
+template <typename T, bool = false>
+struct UseStdToString {
+  typedef std::false_type type;
+};
+
+template <typename T>
+struct UseStdToString<T, true> {
+  typedef std::true_type type;
+};
+
+template <typename T>
+inline std::string to_string(const T& v, std::false_type) {
+  std::ostringstream stm;
+  stm << v;
+  return stm.str();
+}
+
+template <typename T>
+inline std::string to_string(const T& v, std::true_type) {
+  return std::to_string(v);
+}
+
+template <typename T>
+inline std::string to_string(const T& v) {
+  return to_string(v, typename UseStdToString < T,
+                   std::is_arithmetic<T>::value && !std::is_same<bool, typename std::decay<T>::type>::value > ::type{});
+}
+
+template <>
+inline std::string to_string<bool>(const bool& v) {
+  return v ? "true" : "false";
+}
+
+}  // namespace detail
+
 //<!************************************************************************
 class UtilAll {
  public:
@@ -107,9 +145,7 @@
 
   template <typename T>
   static string to_string(const T& n) {
-    std::ostringstream stm;
-    stm << n;
-    return stm.str();
+    return detail::to_string(n);
   }
 
   static bool to_bool(std::string const& s) { return atoi(s.c_str()); }
diff --git a/test/src/protocol/CommandHeaderTest.cpp b/test/src/protocol/CommandHeaderTest.cpp
index 9e043cc..8ce2d59 100644
--- a/test/src/protocol/CommandHeaderTest.cpp
+++ b/test/src/protocol/CommandHeaderTest.cpp
@@ -88,7 +88,7 @@
   EXPECT_EQ(requestMap["group"], group);
   EXPECT_EQ(requestMap["delayLevel"], "2");
   EXPECT_EQ(requestMap["offset"], "3027");
-  EXPECT_EQ(requestMap["unitMode"], "1");
+  EXPECT_EQ(requestMap["unitMode"], "true");
   EXPECT_EQ(requestMap["originMsgId"], originMsgId);
   EXPECT_EQ(requestMap["originTopic"], originTopic);
   EXPECT_EQ(requestMap["maxReconsumeTimes"], "12");
@@ -98,7 +98,7 @@
   EXPECT_EQ(outData["group"], group);
   EXPECT_EQ(outData["delayLevel"], 2);
   EXPECT_EQ(outData["offset"], "3027");
-  EXPECT_EQ(outData["unitMode"], "1");
+  EXPECT_EQ(outData["unitMode"], "true");
   EXPECT_EQ(outData["originMsgId"], originMsgId);
   EXPECT_EQ(outData["originTopic"], originTopic);
   EXPECT_EQ(outData["maxReconsumeTimes"], 12);
@@ -197,7 +197,7 @@
   EXPECT_EQ(requestMap["tranStateTableOffset"], "1000");
   EXPECT_EQ(requestMap["commitLogOffset"], "2000");
   EXPECT_EQ(requestMap["commitOrRollback"], "3000");
-  EXPECT_EQ(requestMap["fromTransactionCheck"], "1");
+  EXPECT_EQ(requestMap["fromTransactionCheck"], "true");
 
   Value outData;
   header.Encode(outData);
@@ -207,7 +207,7 @@
   EXPECT_EQ(outData["tranStateTableOffset"], "1000");
   EXPECT_EQ(outData["commitLogOffset"], "2000");
   EXPECT_EQ(outData["commitOrRollback"], "3000");
-  EXPECT_EQ(outData["fromTransactionCheck"], "1");
+  EXPECT_EQ(outData["fromTransactionCheck"], "true");
 
   EXPECT_NO_THROW(header.toString());
 }
@@ -251,8 +251,8 @@
   EXPECT_EQ(requestMap["flag"], "5");
   EXPECT_EQ(requestMap["properties"], properties);
   EXPECT_EQ(requestMap["reconsumeTimes"], "6");
-  EXPECT_EQ(requestMap["unitMode"], "1");
-  EXPECT_EQ(requestMap["batch"], "0");
+  EXPECT_EQ(requestMap["unitMode"], "true");
+  EXPECT_EQ(requestMap["batch"], "false");
 
   Value outData;
   header.Encode(outData);
@@ -266,8 +266,8 @@
   EXPECT_EQ(outData["flag"], flag);
   EXPECT_EQ(outData["properties"], properties);
   EXPECT_EQ(outData["reconsumeTimes"], "6");
-  EXPECT_EQ(outData["unitMode"], "1");
-  EXPECT_EQ(outData["batch"], "0");
+  EXPECT_EQ(outData["unitMode"], "true");
+  EXPECT_EQ(outData["batch"], "false");
 }
 
 TEST(commandHeader, SendMessageRequestHeaderV2) {
@@ -309,8 +309,8 @@
   EXPECT_EQ(requestMap["h"], "5");
   EXPECT_EQ(requestMap["i"], properties);
   EXPECT_EQ(requestMap["j"], "6");
-  EXPECT_EQ(requestMap["k"], "1");
-  EXPECT_EQ(requestMap["m"], "0");
+  EXPECT_EQ(requestMap["k"], "true");
+  EXPECT_EQ(requestMap["m"], "false");
 
   Value outData;
   header.Encode(outData);
@@ -324,8 +324,8 @@
   EXPECT_EQ(outData["h"], flag);
   EXPECT_EQ(outData["i"], properties);
   EXPECT_EQ(outData["j"], "6");
-  EXPECT_EQ(outData["k"], "1");
-  EXPECT_EQ(outData["m"], "0");
+  EXPECT_EQ(outData["k"], "true");
+  EXPECT_EQ(outData["m"], "false");
 
   SendMessageRequestHeader v1;
   header.CreateSendMessageRequestHeaderV1(v1);
@@ -523,7 +523,7 @@
   header.SetDeclaredFieldOfCommandHeader(requestMap);
   EXPECT_EQ(requestMap["clientId"], "testClientId");
   EXPECT_EQ(requestMap["consumerGroup"], "testConsumer");
-  EXPECT_EQ(requestMap["jstackEnable"], "1");
+  EXPECT_EQ(requestMap["jstackEnable"], "true");
 
   Value outData;
   header.Encode(outData);
