diff --git a/include/libcamera/base/utils.h b/include/libcamera/base/utils.h
index cb8caaa9bacc..fdc3fd91f1b6 100644
--- a/include/libcamera/base/utils.h
+++ b/include/libcamera/base/utils.h
@@ -95,7 +95,7 @@ _hex hex(T value, unsigned int width = 0);
 template<>
 inline _hex hex<int8_t>(int8_t value, unsigned int width)
 {
-	return { static_cast<uint64_t>(value), width ? width : 2 };
+	return { static_cast<uint64_t>(static_cast<uint8_t>(value)), width ? width : 2 };
 }
 
 template<>
@@ -107,7 +107,7 @@ inline _hex hex<uint8_t>(uint8_t value, unsigned int width)
 template<>
 inline _hex hex<int16_t>(int16_t value, unsigned int width)
 {
-	return { static_cast<uint64_t>(value), width ? width : 4 };
+	return { static_cast<uint64_t>(static_cast<uint16_t>(value)), width ? width : 4 };
 }
 
 template<>
@@ -119,7 +119,7 @@ inline _hex hex<uint16_t>(uint16_t value, unsigned int width)
 template<>
 inline _hex hex<int32_t>(int32_t value, unsigned int width)
 {
-	return { static_cast<uint64_t>(value), width ? width : 8 };
+	return { static_cast<uint64_t>(static_cast<uint32_t>(value)), width ? width : 8 };
 }
 
 template<>
