diff --git a/src/platform.c b/src/platform.c
index 0abd6e8..69e2730 100644
--- a/src/platform.c
+++ b/src/platform.c
@@ -1217,33 +1217,56 @@
 
 	switch (*sensor_data_size) {
 	case PLDM_SENSOR_DATA_SIZE_UINT8:
-	case PLDM_SENSOR_DATA_SIZE_SINT8:
 		if (sensor_data_length !=
 		    PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_8BIT_DATA_LENGTH) {
 			return PLDM_ERROR_INVALID_LENGTH;
 		}
 		*present_reading = present_reading_ptr[0];
 		break;
-	case PLDM_SENSOR_DATA_SIZE_UINT16:
-	case PLDM_SENSOR_DATA_SIZE_SINT16:
+	case PLDM_SENSOR_DATA_SIZE_SINT8:
+		if (sensor_data_length !=
+		    PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_8BIT_DATA_LENGTH) {
+			return PLDM_ERROR_INVALID_LENGTH;
+		}
+		*present_reading = (uint32_t)(int32_t)present_reading_ptr[0];
+		break;
+	case PLDM_SENSOR_DATA_SIZE_UINT16: {
+		uint16_t val_le;
+
 		if (sensor_data_length !=
 		    PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_16BIT_DATA_LENGTH) {
 			return PLDM_ERROR_INVALID_LENGTH;
 		}
-		*present_reading = le16toh(present_reading_ptr[1] |
-					   (present_reading_ptr[0] << 8));
+
+		memcpy(&val_le, present_reading_ptr, sizeof(val_le));
+		*present_reading = (uint32_t)(le16toh(val_le));
 		break;
+	}
+	case PLDM_SENSOR_DATA_SIZE_SINT16: {
+		uint16_t val_le;
+
+		if (sensor_data_length !=
+		    PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_16BIT_DATA_LENGTH) {
+			return PLDM_ERROR_INVALID_LENGTH;
+		}
+
+		memcpy(&val_le, present_reading_ptr, sizeof(val_le));
+		*present_reading = (uint32_t)(int32_t)(le16toh(val_le));
+		break;
+	}
 	case PLDM_SENSOR_DATA_SIZE_UINT32:
-	case PLDM_SENSOR_DATA_SIZE_SINT32:
+	case PLDM_SENSOR_DATA_SIZE_SINT32: {
+		uint32_t val_le;
+
 		if (sensor_data_length !=
 		    PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_32BIT_DATA_LENGTH) {
 			return PLDM_ERROR_INVALID_LENGTH;
 		}
-		*present_reading = le32toh(present_reading_ptr[3] |
-					   (present_reading_ptr[2] << 8) |
-					   (present_reading_ptr[1] << 16) |
-					   (present_reading_ptr[0] << 24));
+
+		memcpy(&val_le, present_reading_ptr, sizeof(val_le));
+		*present_reading = le32toh(val_le);
 		break;
+	}
 	default:
 		return PLDM_ERROR_INVALID_DATA;
 	}
diff --git a/tests/libpldm_platform_test.cpp b/tests/libpldm_platform_test.cpp
index 2c2eae6..c493e3e 100644
--- a/tests/libpldm_platform_test.cpp
+++ b/tests/libpldm_platform_test.cpp
@@ -1565,14 +1565,11 @@
     sensorData->event_state = eventState;
     sensorData->previous_event_state = previousEventState;
     sensorData->sensor_data_size = sensorDataSize;
-    sensorData->present_reading[3] =
-        static_cast<uint8_t>(htole32(presentReading) & (0x000000ff));
-    sensorData->present_reading[2] =
-        static_cast<uint8_t>((htole32(presentReading) & (0x0000ff00)) >> 8);
-    sensorData->present_reading[1] =
-        static_cast<uint8_t>((htole32(presentReading) & (0x00ff0000)) >> 16);
-    sensorData->present_reading[0] =
-        static_cast<uint8_t>((htole32(presentReading) & (0xff000000)) >> 24);
+    {
+        uint32_t presentReadingLE = htole32(presentReading);
+        memcpy(&sensorData->present_reading, &presentReadingLE,
+               sizeof(presentReadingLE));
+    }
 
     uint8_t retEventState;
     uint8_t retPreviousEventState;
@@ -1590,10 +1587,11 @@
     EXPECT_EQ(retPresentReading, presentReading);
 
     int16_t presentReadingNew = -31432;
-    sensorData->present_reading[1] =
-        static_cast<uint8_t>(htole16(presentReadingNew) & (0x000000ff));
-    sensorData->present_reading[0] =
-        static_cast<uint8_t>((htole16(presentReadingNew) & (0x0000ff00)) >> 8);
+    {
+        int16_t presentReadingNewLE = htole16(presentReadingNew);
+        memcpy(&sensorData->present_reading, &presentReadingNewLE,
+               sizeof(presentReadingNewLE));
+    }
     sensorDataSize = PLDM_SENSOR_DATA_SIZE_SINT16;
     sensorData->sensor_data_size = sensorDataSize;
     sensorDataLength = PLDM_SENSOR_EVENT_NUMERIC_SENSOR_STATE_16BIT_DATA_LENGTH;
