diff --git a/redfish-core/include/utils/hex_utils.hpp b/redfish-core/include/utils/hex_utils.hpp
index 8ca3a81..c7c89a5 100644
--- a/redfish-core/include/utils/hex_utils.hpp
+++ b/redfish-core/include/utils/hex_utils.hpp
@@ -4,9 +4,7 @@
 #include <cstddef>
 #include <string>
 
-template <typename IntegerType>
-inline std::string intToHexString(IntegerType value,
-                                  size_t digits = sizeof(IntegerType) << 1)
+inline std::string intToHexString(uint64_t value, size_t digits)
 {
     static constexpr std::array<char, 16> digitsArray = {
         '0', '1', '2', '3', '4', '5', '6', '7',
diff --git a/redfish-core/lib/memory.hpp b/redfish-core/lib/memory.hpp
index f20681b..495b0a5 100644
--- a/redfish-core/lib/memory.hpp
+++ b/redfish-core/lib/memory.hpp
@@ -152,7 +152,7 @@
         return;
     }
 
-    aResp->res.jsonValue[key] = "0x" + intToHexString(*value);
+    aResp->res.jsonValue[key] = "0x" + intToHexString(*value, 4);
 }
 
 inline void getPersistentMemoryProperties(
diff --git a/redfish-core/lib/processor.hpp b/redfish-core/lib/processor.hpp
index 654a08b..b74b05c 100644
--- a/redfish-core/lib/processor.hpp
+++ b/redfish-core/lib/processor.hpp
@@ -153,7 +153,7 @@
                 if (value != nullptr)
                 {
                     aResp->res.jsonValue["ProcessorId"]["EffectiveFamily"] =
-                        "0x" + intToHexString(*value);
+                        "0x" + intToHexString(*value, 4);
                 }
             }
             else if (property.first == "EffectiveModel")
@@ -165,7 +165,7 @@
                     return;
                 }
                 aResp->res.jsonValue["ProcessorId"]["EffectiveModel"] =
-                    "0x" + intToHexString(*value);
+                    "0x" + intToHexString(*value, 4);
             }
             else if (property.first == "Id")
             {
@@ -174,7 +174,7 @@
                 {
                     aResp->res
                         .jsonValue["ProcessorId"]["IdentificationRegisters"] =
-                        "0x" + intToHexString(*value);
+                        "0x" + intToHexString(*value, 16);
                 }
             }
             else if (property.first == "Microcode")
@@ -186,7 +186,7 @@
                     return;
                 }
                 aResp->res.jsonValue["ProcessorId"]["MicrocodeInfo"] =
-                    "0x" + intToHexString(*value);
+                    "0x" + intToHexString(*value, 8);
             }
             else if (property.first == "Step")
             {
@@ -197,7 +197,7 @@
                     return;
                 }
                 aResp->res.jsonValue["ProcessorId"]["Step"] =
-                    "0x" + intToHexString(*value);
+                    "0x" + intToHexString(*value, 4);
             }
         }
     }
diff --git a/redfish-core/ut/hex_utils_test.cpp b/redfish-core/ut/hex_utils_test.cpp
index 708cb86..623c065 100644
--- a/redfish-core/ut/hex_utils_test.cpp
+++ b/redfish-core/ut/hex_utils_test.cpp
@@ -4,28 +4,22 @@
 
 TEST(ToHexString, uint64)
 {
-    EXPECT_EQ(intToHexString(0xFFFFFFFFFFFFFFFFULL), "FFFFFFFFFFFFFFFF");
+    EXPECT_EQ(intToHexString(0xFFFFFFFFFFFFFFFFULL, 16), "FFFFFFFFFFFFFFFF");
 
-    EXPECT_EQ(intToHexString<uint64_t>(0), "0000000000000000");
-    EXPECT_EQ(intToHexString<uint64_t>(0, 4), "0000");
-    EXPECT_EQ(intToHexString<uint64_t>(0, 8), "00000000");
-    EXPECT_EQ(intToHexString<uint64_t>(0, 12), "000000000000");
-    EXPECT_EQ(intToHexString<uint64_t>(0, 16), "0000000000000000");
+    EXPECT_EQ(intToHexString(0, 4), "0000");
+    EXPECT_EQ(intToHexString(0, 8), "00000000");
+    EXPECT_EQ(intToHexString(0, 12), "000000000000");
+    EXPECT_EQ(intToHexString(0, 16), "0000000000000000");
 
-    uint64_t deadbeef = 0xDEADBEEFBAD4F00DULL;
-    EXPECT_EQ(intToHexString<uint64_t>(deadbeef), "DEADBEEFBAD4F00D");
-    EXPECT_EQ(intToHexString<uint64_t>(deadbeef, 4), "F00D");
-    EXPECT_EQ(intToHexString<uint64_t>(deadbeef, 8), "BAD4F00D");
-    EXPECT_EQ(intToHexString<uint64_t>(deadbeef, 12), "BEEFBAD4F00D");
-    EXPECT_EQ(intToHexString<uint64_t>(deadbeef, 16), "DEADBEEFBAD4F00D");
+    // uint64_t sized ints
+    EXPECT_EQ(intToHexString(0xDEADBEEFBAD4F00DULL, 4), "F00D");
+    EXPECT_EQ(intToHexString(0xDEADBEEFBAD4F00DULL, 8), "BAD4F00D");
+    EXPECT_EQ(intToHexString(0xDEADBEEFBAD4F00DULL, 12), "BEEFBAD4F00D");
+    EXPECT_EQ(intToHexString(0xDEADBEEFBAD4F00DULL, 16), "DEADBEEFBAD4F00D");
+
+    // uint16_t sized ints
+    EXPECT_EQ(intToHexString(0xBEEF, 1), "F");
+    EXPECT_EQ(intToHexString(0xBEEF, 2), "EF");
+    EXPECT_EQ(intToHexString(0xBEEF, 3), "EEF");
+    EXPECT_EQ(intToHexString(0xBEEF, 4), "BEEF");
 }
-
-TEST(ToHexString, uint16)
-{
-    uint16_t beef = 0xBEEF;
-    EXPECT_EQ(intToHexString(beef), "BEEF");
-    EXPECT_EQ(intToHexString(beef, 1), "F");
-    EXPECT_EQ(intToHexString(beef, 2), "EF");
-    EXPECT_EQ(intToHexString(beef, 3), "EEF");
-    EXPECT_EQ(intToHexString(beef, 4), "BEEF");
-}
\ No newline at end of file
