İngilizce dilinde oku

Aracılığıyla paylaş


BitConverter Sınıf

Tanım

Temel veri türlerini bir bayt dizisine, bayt dizisini de temel veri türlerine dönüştürür.

public static class BitConverter
public sealed class BitConverter
Devralma
BitConverter

Örnekler

Aşağıdaki kod örneği, birkaç BitConverter sınıf yönteminin kullanımını gösterir.

// Example of BitConverter class methods.
using System;

class BitConverterDemo
{
    public static void Main( )
    {
        const string formatter = "{0,25}{1,30}";

        double  aDoubl  = 0.1111111111111111111;
        float   aSingl  = 0.1111111111111111111F;
        long    aLong   = 1111111111111111111;
        int     anInt   = 1111111111;
        short   aShort  = 11111;
        char    aChar   = '*';
        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
*/

Açıklamalar

BitConverter sınıfı, değer türlerini temel biçimlerinde bayt dizisi olarak işlemeye yardımcı olur. Bayt, 8 bit işaretsiz tamsayı olarak tanımlanır. BitConverter sınıfı, aşağıdaki tabloda gösterildiği gibi ilkel türlerin her birini bayt dizisine ve dizisinden dönüştürmek için statik yöntemler içerir.

Verileri gidiş dönüş yapmak için BitConverter yöntemleri kullanıyorsanız, GetBytes aşırı yüklemesinin ve ToTür yönteminin aynı türü belirttiğinden emin olun. Aşağıdaki örnekte gösterildiği gibi, ToUInt32 yöntemini çağırarak imzalı bir tamsayıyı temsil eden bir dizinin geri yüklenmesi özgünden farklı bir değere neden olabilir. Daha fazla bilgi için bkz. İmzalı Ondalık Olmayan ve Bit Düzeyinde Değerlerle Çalışma.

using System;

public class Example
{
   public static void Main()
   {
      int value = -16;
      Byte[] bytes = BitConverter.GetBytes(value);

      // Convert bytes back to int.
      int intValue = BitConverter.ToInt32(bytes, 0);
      Console.WriteLine("{0} = {1}: {2}",
                        value, intValue,
                        value.Equals(intValue) ? "Round-trips" : "Does not round-trip");
      // Convert bytes to UInt32.
      uint uintValue = BitConverter.ToUInt32(bytes, 0);
      Console.WriteLine("{0} = {1}: {2}", value, uintValue,
                        value.Equals(uintValue) ? "Round-trips" : "Does not round-trip");
   }
}
// The example displays the following output:
//       -16 = -16: Round-trips
//       -16 = 4294967280: Does not round-trip

GetBytes yöntemi aşırı yüklemeleri tarafından döndürülen dizideki baytların sırası (DoubleToInt64Bits yöntemi tarafından döndürülen tamsayıdaki bitlerin sırası) bilgisayar mimarisinin küçük endian mı yoksa büyük endian mı olduğuna bağlıdır. Benzer şekilde, dizideki baytların sırası ve ToIntegerValue yöntemleri ve ToChar yöntemi, bilgisayar mimarisinin küçük endian mı yoksa büyük endian mı olduğuna bağlıdır. Bir mimarinin son durumu, küçük endian sistemlerde true ve büyük endian sistemlerde false döndüren IsLittleEndian özelliğiyle belirtilir. Küçük endian sistemlerde, düşük sıralı baytlar daha yüksek sıralı baytların önüne geçin. Big-endian sisteminde, daha yüksek sıralı baytlar alt sıralı baytların önüne geçin. Aşağıdaki tabloda, 1.234.567.890 (0x499602D2) tamsayısının GetBytes(Int32) yöntemine geçirilmesinden kaynaklanan bayt dizilerindeki fark gösterilmektedir. Baytlar, dizin 0'daki bayttan dizin 3'teki bayt sırasına göre listelenir.

Küçük endian D2-02-96-49
Big-endian 49-96-02-D2

Bazı yöntemlerin dönüş değeri sistem mimarisine bağlı olduğundan bayt verilerini makine sınırlarının ötesine aktarırken dikkatli olun:

  • Veri gönderen ve alan tüm sistemlerin aynı son tarihe sahip olacağı garanti edilirse, verilere hiçbir şey yapılması gerekmez.

  • Veri gönderen ve alan sistemlerin farklı bir soniansı olabilirse, verileri her zaman belirli bir sırada iletin. Bu, dizideki bayt sırasının gönderilmeden önce veya alındıktan sonra ters çevrilmesi gerekebileceği anlamına gelir. Yaygın bir kural, verileri ağ bayt sırasına göre (büyük endian sırası) iletmektir. Aşağıdaki örnek, ağ bayt sırasına göre bir tamsayı değeri göndermeye yönelik bir uygulama sağlar.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          int value = 12345678;
          byte[] bytes = BitConverter.GetBytes(value);
          Console.WriteLine(BitConverter.ToString(bytes));
    
          if (BitConverter.IsLittleEndian)
             Array.Reverse(bytes);
    
          Console.WriteLine(BitConverter.ToString(bytes));
          // Call method to send byte stream across machine boundaries.
    
          // Receive byte stream from beyond machine boundaries.
          Console.WriteLine(BitConverter.ToString(bytes));
          if (BitConverter.IsLittleEndian)
             Array.Reverse(bytes);
    
          Console.WriteLine(BitConverter.ToString(bytes));
          int result = BitConverter.ToInt32(bytes, 0);
          Console.WriteLine("Original value: {0}", value);
          Console.WriteLine("Returned value: {0}", result);
       }
    }
    // The example displays the following output on a little-endian system:
    //       4E-61-BC-00
    //       00-BC-61-4E
    //       00-BC-61-4E
    //       4E-61-BC-00
    //       Original value: 12345678
    //       Returned value: 12345678
    
  • Veri gönderen ve alan sistemlerin farklı soniansı varsa ve iletilecek veriler imzalı tamsayılardan oluşuyorsa, verileri ağ bayt sırasına dönüştürmek için IPAddress.HostToNetworkOrder yöntemini ve alıcı tarafından istenen düzene dönüştürmek için IPAddress.NetworkToHostOrder yöntemini çağırın.

Alanlar

IsLittleEndian

Verilerin bu bilgisayar mimarisinde depolandığı bayt sırasını ("endianness") gösterir.

Yöntemler

DoubleToInt64Bits(Double)

Belirtilen çift duyarlıklı kayan nokta sayısını 64 bit imzalı tamsayıya dönüştürür.

DoubleToUInt64Bits(Double)

Belirtilen çift duyarlıklı kayan nokta sayısını 64 bit işaretsiz tamsayıya dönüştürür.

GetBytes(Boolean)

Belirtilen Boole değerini bayt dizisi olarak döndürür.

GetBytes(Char)

Belirtilen Unicode karakter değerini bayt dizisi olarak döndürür.

GetBytes(Double)

Belirtilen çift duyarlıklı kayan nokta değerini bayt dizisi olarak döndürür.

GetBytes(Half)

Belirtilen yarım duyarlıklı kayan nokta değerini bayt dizisi olarak döndürür.

GetBytes(Int128)

Belirtilen 128 bit imzalı tamsayı değerini bayt dizisi olarak döndürür.

GetBytes(Int16)

Belirtilen 16 bit imzalı tamsayı değerini bayt dizisi olarak döndürür.

GetBytes(Int32)

Belirtilen 32 bit imzalı tamsayı değerini bayt dizisi olarak döndürür.

GetBytes(Int64)

Belirtilen 64 bit imzalı tamsayı değerini bayt dizisi olarak döndürür.

GetBytes(Single)

Belirtilen tek duyarlıklı kayan nokta değerini bayt dizisi olarak döndürür.

GetBytes(UInt128)

Belirtilen 128 bit işaretsiz tamsayı değerini bayt dizisi olarak döndürür.

GetBytes(UInt16)

Belirtilen 16 bit işaretsiz tamsayı değerini bayt dizisi olarak döndürür.

GetBytes(UInt32)

Belirtilen 32 bit işaretsiz tamsayı değerini bayt dizisi olarak döndürür.

GetBytes(UInt64)

Belirtilen 64 bit işaretsiz tamsayı değerini bayt dizisi olarak döndürür.

HalfToInt16Bits(Half)

Yarım duyarlıklı kayan nokta değerini 16 bit tamsayıya dönüştürür.

HalfToUInt16Bits(Half)

Belirtilen yarım duyarlıklı kayan nokta sayısını 16 bit işaretsiz tamsayıya dönüştürür.

Int16BitsToHalf(Int16)

Belirtilen 16 bit imzalı tamsayı değerini yarım duyarlıklı kayan nokta değeri olarak yeniden yorumlar.

Int32BitsToSingle(Int32)

Belirtilen 32 bit tamsayıyı tek duyarlıklı kayan nokta değeri olarak yeniden yorumlar.

Int64BitsToDouble(Int64)

Belirtilen 64 bit imzalı tamsayıyı çift duyarlıklı kayan nokta sayısına yeniden yorumlar.

SingleToInt32Bits(Single)

Tek duyarlıklı kayan nokta değerini tamsayıya dönüştürür.

SingleToUInt32Bits(Single)

Belirtilen tek duyarlıklı kayan nokta sayısını 32 bit işaretsiz tamsayıya dönüştürür.

ToBoolean(Byte[], Int32)

Bayt dizisinde belirtilen konumda bayttan dönüştürülmüş bir Boole değeri döndürür.

ToBoolean(ReadOnlySpan<Byte>)

Salt okunur bayt aralığını Boole değerine dönüştürür.

ToChar(Byte[], Int32)

Bayt dizisinde belirtilen konumda iki bayttan dönüştürülmüş bir Unicode karakteri döndürür.

ToChar(ReadOnlySpan<Byte>)

Salt okunur bayt aralığını karaktere dönüştürür.

ToDouble(Byte[], Int32)

Bayt dizisinde belirtilen konumda sekiz bayttan dönüştürülmüş çift duyarlıklı kayan nokta sayısı döndürür.

ToDouble(ReadOnlySpan<Byte>)

Salt okunur bayt aralığını çift duyarlıklı kayan nokta değerine dönüştürür.

ToHalf(Byte[], Int32)

Bayt dizisinde belirtilen konumda iki bayttan dönüştürülmüş yarım duyarlıklı kayan nokta sayısı döndürür.

ToHalf(ReadOnlySpan<Byte>)

Salt okunur bayt aralığını yarım duyarlıklı kayan nokta değerine dönüştürür.

ToInt128(Byte[], Int32)

Bayt dizisinde belirtilen konumda on altı bayttan dönüştürülmüş 128 bit imzalı bir tamsayı döndürür.

ToInt128(ReadOnlySpan<Byte>)

Salt okunur bayt aralığını 128 bit imzalı tamsayıya dönüştürür.

ToInt16(Byte[], Int32)

Bayt dizisinde belirtilen konumda iki bayttan dönüştürülmüş 16 bit imzalı bir tamsayı döndürür.

ToInt16(ReadOnlySpan<Byte>)

Salt okunur bayt aralığını 16 bit imzalı tamsayıya dönüştürür.

ToInt32(Byte[], Int32)

Bayt dizisinde belirtilen konumda dört bayttan dönüştürülmüş 32 bit imzalı bir tamsayı döndürür.

ToInt32(ReadOnlySpan<Byte>)

Salt okunur bayt aralığını 32 bit imzalı tamsayıya dönüştürür.

ToInt64(Byte[], Int32)

Bayt dizisinde belirtilen konumda sekiz bayttan dönüştürülmüş 64 bit imzalı bir tamsayı döndürür.

ToInt64(ReadOnlySpan<Byte>)

Salt okunur bayt aralığını 64 bit imzalı tamsayıya dönüştürür.

ToSingle(Byte[], Int32)

Bayt dizisinde belirtilen konumda dört bayttan dönüştürülmüş tek duyarlıklı kayan nokta sayısı döndürür.

ToSingle(ReadOnlySpan<Byte>)

Salt okunur bayt aralığını tek duyarlıklı kayan nokta değerine dönüştürür.

ToString(Byte[])

Belirtilen bayt dizisinin her öğesinin sayısal değerini eşdeğer onaltılık dize gösterimine dönüştürür.

ToString(Byte[], Int32)

Belirtilen bayt alt dizisinin her öğesinin sayısal değerini eşdeğer onaltılık dize gösterimine dönüştürür.

ToString(Byte[], Int32, Int32)

Belirtilen bayt alt dizisinin her öğesinin sayısal değerini eşdeğer onaltılık dize gösterimine dönüştürür.

ToUInt128(Byte[], Int32)

Bayt dizisinde belirtilen konumda dört bayttan dönüştürülmüş 128 bit işaretsiz tamsayı döndürür.

ToUInt128(ReadOnlySpan<Byte>)

Salt okunur bayt aralığını 128 bit işaretsiz tamsayıya dönüştürür.

ToUInt16(Byte[], Int32)

Bayt dizisinde belirtilen konumda iki bayttan dönüştürülmüş 16 bit işaretsiz tamsayı döndürür.

ToUInt16(ReadOnlySpan<Byte>)

Salt okunur bayt aralığını 16 bit işaretsiz tamsayıya dönüştürür.

ToUInt32(Byte[], Int32)

Bayt dizisinde belirtilen konumda dört bayttan dönüştürülmüş 32 bit işaretsiz tamsayı döndürür.

ToUInt32(ReadOnlySpan<Byte>)

Salt okunur bayt aralığını 32 bit işaretsiz tamsayıya dönüştürür.

ToUInt64(Byte[], Int32)

Bayt dizisinde belirtilen konumda sekiz bayttan dönüştürülmüş 64 bit işaretsiz bir tamsayı döndürür.

ToUInt64(ReadOnlySpan<Byte>)

Baytları işaretsiz uzun bir uzunluğna dönüştürür.

TryWriteBytes(Span<Byte>, Boolean)

Boole değerini bayt aralığına dönüştürür.

TryWriteBytes(Span<Byte>, Char)

Bir karakteri bayt aralığına dönüştürür.

TryWriteBytes(Span<Byte>, Double)

Çift duyarlıklı kayan nokta değerini bayt aralığına dönüştürür.

TryWriteBytes(Span<Byte>, Half)

Yarım duyarlıklı kayan nokta değerini bayt aralığına dönüştürür.

TryWriteBytes(Span<Byte>, Int128)

128 bit imzalı tamsayıyı bayt aralığına dönüştürür.

TryWriteBytes(Span<Byte>, Int16)

16 bit imzalı tamsayıyı bayt aralığına dönüştürür.

TryWriteBytes(Span<Byte>, Int32)

32 bit imzalı tamsayıyı bayt aralığına dönüştürür.

TryWriteBytes(Span<Byte>, Int64)

64 bit imzalı tamsayıyı bayt aralığına dönüştürür.

TryWriteBytes(Span<Byte>, Single)

Tek duyarlıklı kayan nokta değerini bayt aralığına dönüştürür.

TryWriteBytes(Span<Byte>, UInt128)

128 bit işaretsiz tamsayıyı bayt aralığına dönüştürür.

TryWriteBytes(Span<Byte>, UInt16)

İmzasız bir 16 bit tamsayıyı bayt aralığına dönüştürür.

TryWriteBytes(Span<Byte>, UInt32)

32 bit işaretsiz tamsayıyı bayt aralığına dönüştürür.

TryWriteBytes(Span<Byte>, UInt64)

İmzasız bir 64 bit tamsayıyı bayt aralığına dönüştürür.

UInt16BitsToHalf(UInt16)

Belirtilen 16 bit işaretsiz tamsayıyı yarım duyarlıklı kayan nokta sayısına dönüştürür.

UInt32BitsToSingle(UInt32)

Belirtilen 32 bit işaretsiz tamsayıyı tek duyarlıklı kayan nokta sayısına dönüştürür.

UInt64BitsToDouble(UInt64)

Belirtilen 64 bit işaretsiz tamsayıyı çift duyarlıklı kayan nokta sayısına dönüştürür.

Şunlara uygulanır

Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Ayrıca bkz.