C# | BitConverter.ToDouble() Method - GeeksforGeeks

01 Feb, 2019
BitConverter.ToDouble() Method is used to return a double-precision floating point number converted from eight bytes at a specified position in a byte array.
Syntax:
public static double ToDouble (byte[] value, int startIndex);
Parameters:
value: It is an array of bytes.startIndex: It is the starting position within the value.
Return Value: This method returns a double precision floating point number formed by eight bytes beginning at startIndex.
Exceptions:
ArgumentException: If the startIndex is greater than or equal to the length of value minus 7, and is less than or equal to the length of value minus 1.
ArgumentNullException: If the value is null.
ArgumentOutOfRangeException: If the startIndex is less than zero or greater than the length of value minus 1.
Below programs illustrate the use of BitConverter.ToDouble(Byte[], Int32) Method:
Example 1:
// C# program to demonstrate// BitConverter.ToDouble(Byte[], Int32)// Methodusing System;  class GFG {  // Main Methodpublic static void Main(){      try {          // Define an array of byte values.        byte[] bytes = {0,0,1,2,7,126,78,55,                        255,78,45,198,200,1,                        1,1,1,255,255,2,4,4,                        77,77,77,77,77,0,1};          // Display the values of the myArr.        Console.WriteLine("Initial Array: ");          // calling the PrintIndexAndValues()        // method to print        PrintIndexAndValues(bytes);          // print char value        Console.WriteLine("index     Array elements    "+                                   "              double values");        Console.WriteLine();          // getting double value and Display it        for (int index = 0; index < bytes.Length - 7;                                index = index + 8) {            double values = BitConverter.ToDouble(bytes, index);            Console.WriteLine(" {0}     {1}    {2}",                   index, BitConverter.ToString(bytes,                                   index, 8), values);        }    }    catch (ArgumentNullException e) {          Console.Write("Exception Thrown: ");        Console.Write("{0}", e.GetType(), e.Message);    }    catch (ArgumentOutOfRangeException e) {          Console.Write("Exception Thrown: ");        Console.Write("{0}", e.GetType(), e.Message);    }    catch (ArgumentException e) {          Console.Write("Exception Thrown: ");        Console.Write("{0}", e.GetType(), e.Message);    }}  // Defining the method// PrintIndexAndValuespublic static void PrintIndexAndValues(byte[] myArr){    int count = 0;    for (int i = 0; i < myArr.Length; i++) {          if (count == 18) {            Console.WriteLine();            Console.Write("{0} ", myArr[i]);            count = 0;        }        else {            Console.Write("{0} ", myArr[i]);            count++;        }    }      Console.WriteLine();    Console.WriteLine();}}
Output:
Initial Array: 
0 0 1 2 7 126 78 55 255 78 45 198 200 1 1 1 1 255 
255 2 4 4 77 77 77 77 77 0 1 

index     Array elements                  double values

 0     00-00-01-02-07-7E-4E-37    2.73464354303054E-42
 8     FF-4E-2D-C6-C8-01-01-01    7.74999325882041E-304
 16     01-FF-FF-02-04-04-4D-4D    2.38727219494443E+64

Example 2: For ArgumentException
// C# program to demonstrate// BitConverter.ToDouble(Byte[], Int32)// Methodusing System;  class GFG {  // Main Methodpublic static void Main(){      try {          // Define an array of byte values.        byte[] bytes = {0,0,1,2,7,126,78,55,                        255,78,45,198,200,1,                        1,1,1,255,255,2,4,4,                        77,77,77,77,77,0,1,                        0,0,1,2,7,126,78,55,                        255,78,45,198,200,1,                        1,1,1,255,255,2,4,4,                        255,255,255,255,245,                        245,245,245,245,245,                        245,245,245,245,0,0,                        0,0,0,0,0,0,6,5,6,56,                        31,31,31,54,23,253,};          // Display the values of the myArr.        Console.WriteLine("Initial Array: ");          // calling the PrintIndexAndValues()        // method to print        PrintIndexAndValues(bytes);          // print char value        Console.WriteLine("index     Array elements"+                             "       double values");        Console.WriteLine();          // getting double value and Display it        for (int index = 4; index < bytes.Length - 6;                             index = index + 8) {              if (index == bytes.Length - 7) {                Console.WriteLine();                Console.WriteLine("startIndex is equal to"+                            " the length of bytes minus 7");                                              double values = BitConverter.ToDouble(bytes, index);                Console.WriteLine("  {0}        {1}         {2}",                               index, BitConverter.ToString(bytes,                                              index, 4), values);            }            else {                double values = BitConverter.ToDouble(bytes, index);                Console.WriteLine("  {0}        {1}         {2}",                       index, BitConverter.ToString(bytes, index,                                                     8), values);            }        }    }    catch (ArgumentNullException e) {          Console.Write("Exception Thrown: ");        Console.Write("{0}", e.GetType(), e.Message);    }    catch (ArgumentOutOfRangeException e) {          Console.Write("Exception Thrown: ");        Console.Write("{0}", e.GetType(), e.Message);    }    catch (ArgumentException e) {          Console.Write("Exception Thrown: ");        Console.Write("{0}", e.GetType(), e.Message);    }}  // Defining the method// PrintIndexAndValuespublic static void PrintIndexAndValues(byte[] myArr){    int count = 0;    for (int i = 0; i < myArr.Length; i++) {          if (count == 18) {            Console.WriteLine();            Console.Write("{0} ", myArr[i]);            count = 0;        }        else {            Console.Write("{0} ", myArr[i]);            count++;        }    }      Console.WriteLine();    Console.WriteLine();}}
Output:
Initial Array: 
0 0 1 2 7 126 78 55 255 78 45 198 200 1 1 1 1 255 
255 2 4 4 77 77 77 77 77 0 1 0 0 1 2 7 126 78 55 
255 78 45 198 200 1 1 1 1 255 255 2 4 4 255 255 255 255 245 
245 245 245 245 245 245 245 245 245 0 0 0 0 0 0 0 0 6 5 
6 56 31 31 31 54 23 253 

index        Array elements                    double values

  4        07-7E-4E-37-FF-4E-2D-C6         -1.16103254047091E+30
  12        C8-01-01-01-01-FF-FF-02         3.13113229681351E-294
  20        04-04-4D-4D-4D-4D-4D-00         3.25995134720157E-307
  28        01-00-00-01-02-07-7E-4E         1.29525825666467E+70
  36        37-FF-4E-2D-C6-C8-01-01         8.10420695824091E-304
  44        01-01-FF-FF-02-04-04-FF         -6.86302832487538E+303
  52        FF-FF-FF-F5-F5-F5-F5-F5         -1.68827860814431E+260
  60        F5-F5-F5-F5-F5-00-00-00         5.21927749055768E-312
  68        00-00-00-00-00-06-05-06         1.15818454395586E-279

startIndex is equal to the length of bytes minus 7
Exception Thrown: System.ArgumentException

Example 3: For ArgumentOutOfRangeException
// C# program to demonstrate// BitConverter.ToDouble(Byte[], Int32)// Methodusing System;  class GFG {  // Main Methodpublic static void Main(){      try {          // Define an array of byte values.        byte[] bytes = {0,0,1,2,7,126,78,55,                    255,78,45,198,200,1,                    1,1,1,255,255,2,4,4,                    77,77,77,77,77,0,1,                    0,0,1,2,7,126,78,55,                    255,78,45,198,200,1,                    1,1,1,255,255,2,4,4,                    255,255,255,255,245,                    245,245,245,245,245,                    245,245,245,245,0,0,                    0,0,0,0,0,0,6,5,6,56,                    31,31,31,54,23,253,};          // Display the values of the myArr.        Console.WriteLine("Initial Array: ");          // calling the PrintIndexAndValues()        // method to print        PrintIndexAndValues(bytes);          // getting double value and Display it        Console.WriteLine("startIndex is less than zero");        double values = BitConverter.ToDouble(bytes, -1);        Console.WriteLine(" {0}     {1}         {2}", -1,                 BitConverter.ToString(bytes, -1, 8),                                             values);    }    catch (ArgumentNullException e) {          Console.Write("Exception Thrown: ");        Console.Write("{0}", e.GetType(), e.Message);    }    catch (ArgumentOutOfRangeException e) {          Console.Write("Exception Thrown: ");        Console.Write("{0}", e.GetType(), e.Message);    }    catch (ArgumentException e) {          Console.Write("Exception Thrown: ");        Console.Write("{0}", e.GetType(), e.Message);    }}  // Defining the method// PrintIndexAndValuespublic static void PrintIndexAndValues(byte[] myArr){    int count = 0;    for (int i = 0; i < myArr.Length; i++) {          if (count == 18) {            Console.WriteLine();            Console.Write("{0} ", myArr[i]);            count = 0;        }        else {            Console.Write("{0} ", myArr[i]);            count++;        }    }      Console.WriteLine();    Console.WriteLine();}}
Output:
Initial Array: 
0 0 1 2 7 126 78 55 255 78 45 198 200 1 1 1 1 255 
255 2 4 4 77 77 77 77 77 0 1 0 0 1 2 7 126 78 55 
255 78 45 198 200 1 1 1 1 255 255 2 4 4 255 255 255 255 245 
245 245 245 245 245 245 245 245 245 0 0 0 0 0 0 0 0 6 5 
6 56 31 31 31 54 23 253 

startIndex is less than zero
Exception Thrown: System.ArgumentOutOfRangeException

Example 4: For ArgumentNullException
// C# program to demonstrate// BitConverter.ToDouble(Byte[], Int32)// Methodusing System;  class GFG {  // Main Methodpublic static void Main(){      try {          // Define an array of byte values.        byte[] bytes = null;          // getting double value and Display it        Console.WriteLine("array bytes is null");        double values = BitConverter.ToDouble(bytes, 0);        Console.WriteLine(" {0}     {1}         {2}", 0,          BitConverter.ToString(bytes, 0, 8), values);    }    catch (ArgumentNullException e) {          Console.Write("Exception Thrown: ");        Console.Write("{0}", e.GetType(), e.Message);    }    catch (ArgumentOutOfRangeException e) {          Console.Write("Exception Thrown: ");        Console.Write("{0}", e.GetType(), e.Message);    }    catch (ArgumentException e) {          Console.Write("Exception Thrown: ");        Console.Write("{0}", e.GetType(), e.Message);    }}  // Defining the method// PrintIndexAndValuespublic static void PrintIndexAndValues(byte[] myArr){    int count = 0;    for (int i = 0; i < myArr.Length; i++) {          if (count == 18) {            Console.WriteLine();            Console.Write("{0} ", myArr[i]);            count = 0;        }        else {            Console.Write("{0} ", myArr[i]);            count++;        }    }      Console.WriteLine();    Console.WriteLine();}}
Output:
array bytes is null
Exception Thrown: System.ArgumentNullException

Reference:
https://docs.microsoft.com/en-us/dotnet/api/system.bitconverter.todouble?view=netframework-4.7.2
CSharp-BitConverter-Class
CSharp-method
C#
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Difference between Abstract Class and Interface in C#
C# | How to check whether a List contains a specified element
C# | IsNullOrEmpty() Method
C# | Method Overriding
C# Dictionary with examples
String.Split() Method in C# with Examples
Difference between Ref and Out keywords in C#
C# | Arrays of Strings
C# | Delegates
Top 50 C# Interview Questions & Answers