diff --git a/src/core/lib/support/percent_encoding.c b/src/core/lib/support/percent_encoding.c
index 5da763c9a54748c26934d95454012381d5eeaacc..88953f25426c57c30c6e3d5b8d28b79df4a816b6 100644
--- a/src/core/lib/support/percent_encoding.c
+++ b/src/core/lib/support/percent_encoding.c
@@ -81,9 +81,9 @@ static bool valid_hex(const uint8_t *p, const uint8_t *end) {
 }
 
 static uint8_t dehex(uint8_t c) {
-  if (c >= '0' && c <= '9') return c - '0';
-  if (c >= 'A' && c <= 'F') return c - 'A' + 10;
-  if (c >= 'a' && c <= 'f') return c - 'a' + 10;
+  if (c >= '0' && c <= '9') return (uint8_t)(c - '0');
+  if (c >= 'A' && c <= 'F') return (uint8_t)(c - 'A' + 10);
+  if (c >= 'a' && c <= 'f') return (uint8_t)(c - 'a' + 10);
   GPR_UNREACHABLE_CODE(return 255);
 }