diff --git a/OpenMetaverse.StructuredData/LLSD/BinaryLLSD.cs b/OpenMetaverse.StructuredData/LLSD/BinaryLLSD.cs index 999138e0..65eb820d 100644 --- a/OpenMetaverse.StructuredData/LLSD/BinaryLLSD.cs +++ b/OpenMetaverse.StructuredData/LLSD/BinaryLLSD.cs @@ -112,6 +112,7 @@ namespace OpenMetaverse.StructuredData { MemoryStream stream = SerializeLLSDBinaryStream(osd); byte[] binaryData = stream.ToArray(); + stream.Close(); return binaryData; @@ -147,7 +148,12 @@ namespace OpenMetaverse.StructuredData break; case OSDType.Real: stream.WriteByte(realBinaryMarker); - stream.Write(osd.AsBinary(), 0, doubleLength); + byte[] bytes = osd.AsBinary(); + + if(BitConverter.IsLittleEndian) + Array.Reverse(bytes); + + stream.Write(bytes, 0, doubleLength); break; case OSDType.UUID: stream.WriteByte(uuidBinaryMarker); diff --git a/OpenMetaverse.StructuredData/StructuredData.cs b/OpenMetaverse.StructuredData/StructuredData.cs index 6a915154..d548e683 100644 --- a/OpenMetaverse.StructuredData/StructuredData.cs +++ b/OpenMetaverse.StructuredData/StructuredData.cs @@ -627,7 +627,13 @@ namespace OpenMetaverse.StructuredData public override byte[] AsBinary() { TimeSpan ts = value.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); - return Utils.DoubleToBytes(ts.TotalSeconds); + + byte[] bytes = Utils.DoubleToBytes(ts.TotalSeconds); + + if (BitConverter.IsLittleEndian) + Array.Reverse(bytes); + + return bytes; } public override DateTime AsDate() { return value; } diff --git a/OpenMetaverse/Types/UtilsConversions.cs b/OpenMetaverse/Types/UtilsConversions.cs index 81f64773..a238e385 100644 --- a/OpenMetaverse/Types/UtilsConversions.cs +++ b/OpenMetaverse/Types/UtilsConversions.cs @@ -276,6 +276,9 @@ namespace OpenMetaverse bytes[2] = (byte)((value >> 16) % 256); bytes[3] = (byte)((value >> 24) % 256); + if (BitConverter.IsLittleEndian) + Array.Reverse(bytes); + return bytes; }