mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	MessagePack: serialize round floats as integers (fixes #1718)
This commit is contained in:
		| @@ -23,6 +23,11 @@ class MsgPackSerializer : public Visitor<size_t> { | ||||
|  | ||||
|   template <typename T> | ||||
|   typename enable_if<sizeof(T) == 4, size_t>::type visitFloat(T value32) { | ||||
|     if (canConvertNumber<Integer>(value32)) { | ||||
|       Integer truncatedValue = Integer(value32); | ||||
|       if (value32 == T(truncatedValue)) | ||||
|         return visitSignedInteger(truncatedValue); | ||||
|     } | ||||
|     writeByte(0xCA); | ||||
|     writeInteger(value32); | ||||
|     return bytesWritten(); | ||||
| @@ -32,13 +37,10 @@ class MsgPackSerializer : public Visitor<size_t> { | ||||
|   ARDUINOJSON_NO_SANITIZE("float-cast-overflow") | ||||
|   typename enable_if<sizeof(T) == 8, size_t>::type visitFloat(T value64) { | ||||
|     float value32 = float(value64); | ||||
|     if (value32 == value64) { | ||||
|       writeByte(0xCA); | ||||
|       writeInteger(value32); | ||||
|     } else { | ||||
|       writeByte(0xCB); | ||||
|       writeInteger(value64); | ||||
|     } | ||||
|     if (value32 == value64) | ||||
|       return visitFloat(value32); | ||||
|     writeByte(0xCB); | ||||
|     writeInteger(value64); | ||||
|     return bytesWritten(); | ||||
|   } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user