diff --git a/core/sysparam.c b/core/sysparam.c
index 126cfe0..27471a0 100644
--- a/core/sysparam.c
+++ b/core/sysparam.c
@@ -801,9 +801,13 @@ sysparam_status_t sysparam_get_bool(const char *key, bool *result) {
     do {
         if (binary) {
             if (data_len == 1) {  // int8 value
-                *result = (int8_t)(*buf) ? true : false;
+                uint8_t value;
+                memcpy(&value, buf, sizeof(value));
+                *result = value ? true : false;
             } else if (data_len == 4) {  // int32 value
-                *result = (int32_t)(*buf) ? true : false;
+                uint32_t value;
+                memcpy(&value, buf, sizeof(value));
+                *result = value ? true : false;
             } else {
                 status = SYSPARAM_PARSEFAILED;
             }