diff --git a/OpenMetaverse.StructuredData/LLSD/BinaryLLSD.cs b/OpenMetaverse.StructuredData/LLSD/BinaryLLSD.cs
index 65eb820d..c340f8e6 100644
--- a/OpenMetaverse.StructuredData/LLSD/BinaryLLSD.cs
+++ b/OpenMetaverse.StructuredData/LLSD/BinaryLLSD.cs
@@ -148,12 +148,7 @@ namespace OpenMetaverse.StructuredData
break;
case OSDType.Real:
stream.WriteByte(realBinaryMarker);
- byte[] bytes = osd.AsBinary();
-
- if(BitConverter.IsLittleEndian)
- Array.Reverse(bytes);
-
- stream.Write(bytes, 0, doubleLength);
+ stream.Write(osd.AsBinary(), 0, doubleLength);
break;
case OSDType.UUID:
stream.WriteByte(uuidBinaryMarker);
diff --git a/OpenMetaverse.StructuredData/StructuredData.cs b/OpenMetaverse.StructuredData/StructuredData.cs
index d548e683..11179ecc 100644
--- a/OpenMetaverse.StructuredData/StructuredData.cs
+++ b/OpenMetaverse.StructuredData/StructuredData.cs
@@ -391,7 +391,7 @@ namespace OpenMetaverse.StructuredData
public override ulong AsULong() { return (ulong)value; }
public override double AsReal() { return (double)value; }
public override string AsString() { return value.ToString(); }
- public override byte[] AsBinary() { return Utils.IntToBytes(value); }
+ public override byte[] AsBinary() { return Utils.IntToBytesBig(value); }
public override string ToString() { return AsString(); }
}
@@ -458,7 +458,7 @@ namespace OpenMetaverse.StructuredData
public override double AsReal() { return value; }
public override string AsString() { return value.ToString(Utils.EnUsCulture); }
- public override byte[] AsBinary() { return Utils.DoubleToBytes(value); }
+ public override byte[] AsBinary() { return Utils.DoubleToBytesBig(value); }
public override string ToString() { return AsString(); }
}
@@ -627,13 +627,7 @@ namespace OpenMetaverse.StructuredData
public override byte[] AsBinary()
{
TimeSpan ts = value.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
-
- byte[] bytes = Utils.DoubleToBytes(ts.TotalSeconds);
-
- if (BitConverter.IsLittleEndian)
- Array.Reverse(bytes);
-
- return bytes;
+ return Utils.DoubleToBytesBig(ts.TotalSeconds);
}
public override DateTime AsDate() { return value; }
diff --git a/OpenMetaverse/Types/UtilsConversions.cs b/OpenMetaverse/Types/UtilsConversions.cs
index a238e385..2e324a06 100644
--- a/OpenMetaverse/Types/UtilsConversions.cs
+++ b/OpenMetaverse/Types/UtilsConversions.cs
@@ -276,8 +276,22 @@ namespace OpenMetaverse
bytes[2] = (byte)((value >> 16) % 256);
bytes[3] = (byte)((value >> 24) % 256);
- if (BitConverter.IsLittleEndian)
- Array.Reverse(bytes);
+ return bytes;
+ }
+
+ ///
+ /// Convert an integer to a byte array in big endian format
+ ///
+ /// The integer to convert
+ /// A four byte big endian array
+ public static byte[] IntToBytesBig(int value)
+ {
+ byte[] bytes = new byte[4];
+
+ bytes[0] = (byte)((value >> 24) % 256);
+ bytes[1] = (byte)((value >> 16) % 256);
+ bytes[2] = (byte)((value >> 8) % 256);
+ bytes[3] = (byte)(value % 256);
return bytes;
}
@@ -378,6 +392,14 @@ namespace OpenMetaverse
return bytes;
}
+ public static byte[] DoubleToBytesBig(double value)
+ {
+ byte[] bytes = BitConverter.GetBytes(value);
+ if (BitConverter.IsLittleEndian)
+ Array.Reverse(bytes);
+ return bytes;
+ }
+
public static void DoubleToBytes(double value, byte[] dest, int pos)
{
byte[] bytes = DoubleToBytes(value);