BitConverter Class
Converts base data types to an array of bytes, and an array of bytes to base data types.
Assembly: mscorlib (in mscorlib.dll)
The BitConverter type exposes the following members.
Name | Description | |
---|---|---|
DoubleToInt64Bits | Converts the specified double-precision floating point number to a 64-bit signed integer. | |
GetBytes(Boolean) | Returns the specified Boolean value as an array of bytes. | |
GetBytes(Char) | Returns the specified Unicode character value as an array of bytes. | |
GetBytes(Double) | Returns the specified double-precision floating point value as an array of bytes. | |
GetBytes(Int16) | Returns the specified 16-bit signed integer value as an array of bytes. | |
GetBytes(Int32) | Returns the specified 32-bit signed integer value as an array of bytes. | |
GetBytes(Int64) | Returns the specified 64-bit signed integer value as an array of bytes. | |
GetBytes(Single) | Returns the specified single-precision floating point value as an array of bytes. | |
GetBytes(UInt16) | Returns the specified 16-bit unsigned integer value as an array of bytes. | |
GetBytes(UInt32) | Returns the specified 32-bit unsigned integer value as an array of bytes. | |
GetBytes(UInt64) | Returns the specified 64-bit unsigned integer value as an array of bytes. | |
Int64BitsToDouble | Converts the specified 64-bit signed integer to a double-precision floating point number. | |
ToBoolean | Returns a Boolean value converted from one byte at a specified position in a byte array. | |
ToChar | Returns a Unicode character converted from two bytes at a specified position in a byte array. | |
ToDouble | Returns a double-precision floating point number converted from eight bytes at a specified position in a byte array. | |
ToInt16 | Returns a 16-bit signed integer converted from two bytes at a specified position in a byte array. | |
ToInt32 | Returns a 32-bit signed integer converted from four bytes at a specified position in a byte array. | |
ToInt64 | Returns a 64-bit signed integer converted from eight bytes at a specified position in a byte array. | |
ToSingle | Returns a single-precision floating point number converted from four bytes at a specified position in a byte array. | |
ToString(array<Byte>) | Converts the numeric value of each element of a specified array of bytes to its equivalent hexadecimal string representation. | |
ToString(array<Byte>, Int32) | Converts the numeric value of each element of a specified subarray of bytes to its equivalent hexadecimal string representation. | |
ToString(array<Byte>, Int32, Int32) | Converts the numeric value of each element of a specified subarray of bytes to its equivalent hexadecimal string representation. | |
ToUInt16 | Returns a 16-bit unsigned integer converted from two bytes at a specified position in a byte array. | |
ToUInt32 | Returns a 32-bit unsigned integer converted from four bytes at a specified position in a byte array. | |
ToUInt64 | Returns a 64-bit unsigned integer converted from eight bytes at a specified position in a byte array. |
Name | Description | |
---|---|---|
IsLittleEndian | Indicates the byte order ("endianness") in which data is stored in this computer architecture. |
The BitConverter class helps manipulate value types in their fundamental form, as a series of bytes. A byte is defined as an 8-bit unsigned integer. The BitConverter class includes static methods to convert each of the primitive types to and from an array of bytes, as the following table illustrates.
Type | To byte conversion | From byte conversion |
---|---|---|
-or- | -or- | |
If you use BitConverter methods to round-trip data, make sure that the GetBytes overload and the ToType method specify the same type. As the following example illustrates, restoring an array that represents a signed integer by calling the ToUInt32 method can result in a value that is different from the original. For more information, see the entry Working with Signed Non-Decimal and Bitwise Values in the BCL Team Blog.
The order of bytes in the array returned by the GetBytes method overloads (as well as the order of bits in the integer returned by the DoubleToInt64Bits method and the order of hexadecimal strings returned by the ToString(array<Byte>) method) depends on whether the computer architecture is little-endian or big-endian. Similarly, the order of bytes in the array and returned by the ToIntegerValue methods and the ToChar method depends on whether the computer architecture is little-endian or big-endian. The endianness of an architecture is indicated by the IsLittleEndian property, which returns true on little-endian systems and false on big-endian systems. On little-endian systems, lower-order bytes precede higher-order bytes. On big-endian system, higher-order bytes precede lower-order bytes. The following table illustrates the difference in the byte arrays that result from passing the integer 1,234,567,890 (0x499602D2) to the GetBytes(Int32) method. The bytes are listed in order from the byte at index 0 to the byte at index 3.
Little-endian | D2-02-96-49 |
Big-endian | 49-96-02-D2 |
Because the return value of some methods depends on system architecture, be careful when transmitting byte data beyond machine boundaries:
If all systems sending and receiving data are guaranteed to have the same endianness, nothing has be done to the data.
If systems sending and receiving data can have different endianness, always transmit data in a particular order. This means that the order of bytes in the array may have to be reversed either before sending them or after receiving them. A common convention is to transmit data in network byte order (big-endian order). The following example provides an implementation for sending an integer value in network byte order.
If systems sending and receiving data can have different endianness and the data to be transmitted consists of signed integers, call the IPAddress::HostToNetworkOrder method to convert the data to network byte order and the IPAddress::NetworkToHostOrder method to convert it to the order required by the recipient.
The following code example illustrates the use of several BitConverter class methods.
// Example of BitConverter class methods. using namespace System; int main() { String^ formatter = "{0,25}{1,30}"; double aDoubl = 0.1111111111111111111; float aSingl = 0.1111111111111111111F; __int64 aLong = 1111111111111111111; int anInt = 1111111111; short aShort = 11111; __wchar_t aChar = L'*'; bool aBool = true; Console::WriteLine( "This example of methods of the BitConverter class" "\ngenerates the following output.\n" ); Console::WriteLine( formatter, "argument", "byte array" ); Console::WriteLine( formatter, "--------", "----------" ); // Convert values to Byte arrays and display them. Console::WriteLine( formatter, aDoubl, BitConverter::ToString( BitConverter::GetBytes( aDoubl ) ) ); Console::WriteLine( formatter, aSingl, BitConverter::ToString( BitConverter::GetBytes( aSingl ) ) ); Console::WriteLine( formatter, aLong, BitConverter::ToString( BitConverter::GetBytes( aLong ) ) ); Console::WriteLine( formatter, anInt, BitConverter::ToString( BitConverter::GetBytes( anInt ) ) ); Console::WriteLine( formatter, aShort, BitConverter::ToString( BitConverter::GetBytes( aShort ) ) ); Console::WriteLine( formatter, aChar, BitConverter::ToString( BitConverter::GetBytes( aChar ) ) ); Console::WriteLine( formatter, aBool, BitConverter::ToString( BitConverter::GetBytes( aBool ) ) ); } /* This example of methods of the BitConverter class generates the following output. argument byte array -------- ---------- 0.111111111111111 1C-C7-71-1C-C7-71-BC-3F 0.1111111 39-8E-E3-3D 1111111111111111111 C7-71-C4-2B-AB-75-6B-0F 1111111111 C7-35-3A-42 11111 67-2B * 2A-00 True 01 */
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.