From 8a2d0f48d70bd760bf26218f7107c86ca9f91cce Mon Sep 17 00:00:00 2001 From: csharptest Date: Thu, 2 Jun 2011 17:02:41 -0500 Subject: big-endian support for float, and double on Silverlight --- src/ProtocolBuffers/CodedOutputStream.cs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src/ProtocolBuffers/CodedOutputStream.cs') diff --git a/src/ProtocolBuffers/CodedOutputStream.cs b/src/ProtocolBuffers/CodedOutputStream.cs index f30c8061..50a7f372 100644 --- a/src/ProtocolBuffers/CodedOutputStream.cs +++ b/src/ProtocolBuffers/CodedOutputStream.cs @@ -446,12 +446,13 @@ namespace Google.ProtocolBuffers /// public void WriteDoubleNoTag(double value) { - // TODO(jonskeet): Test this on different endiannesses #if SILVERLIGHT2 || COMPACT_FRAMEWORK_35 - byte[] bytes = BitConverter.GetBytes(value); - WriteRawBytes(bytes, 0, 8); + byte[] rawBytes = BitConverter.GetBytes(value); + if (!BitConverter.IsLittleEndian) + Array.Reverse(rawBytes); + WriteRawBytes(rawBytes, 0, 8); #else - WriteRawLittleEndian64((ulong)BitConverter.DoubleToInt64Bits(value)); + WriteRawLittleEndian64((ulong)BitConverter.DoubleToInt64Bits(value)); #endif } @@ -460,10 +461,10 @@ namespace Google.ProtocolBuffers /// public void WriteFloatNoTag(float value) { - // TODO(jonskeet): Test this on different endiannesses byte[] rawBytes = BitConverter.GetBytes(value); - uint asInteger = BitConverter.ToUInt32(rawBytes, 0); - WriteRawLittleEndian32(asInteger); + if (!BitConverter.IsLittleEndian) + Array.Reverse(rawBytes); + WriteRawBytes(rawBytes, 0, 4); } /// -- cgit v1.2.3