この記事の英語版を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

BitConverter クラス

基本データ型をバイト配列に、バイト配列を基本データ型に変換します。

System.Object
  System.BitConverter

名前空間:  System
アセンブリ :  mscorlib (mscorlib.dll 内)

public static class BitConverter

BitConverter 型で公開されるメンバーは以下のとおりです。

  名前説明
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートDoubleToInt64Bits指定した倍精度浮動小数点数を 64 ビット符号付き整数に変換します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートGetBytes(Boolean)指定したブール値をバイト配列として返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートGetBytes(Char)指定した Unicode 文字値をバイト配列として返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートGetBytes(Double)指定した倍精度浮動小数点値をバイト配列として返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートGetBytes(Int16)指定した 16 ビットの符号なし整数値をバイト配列として返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートGetBytes(Int32)指定した 32 ビットの符号なし整数値をバイト配列として返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートGetBytes(Int64)指定した 64 ビットの符号なし整数値をバイト配列として返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートGetBytes(Single)指定した単精度浮動小数点値をバイト配列として返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートGetBytes(UInt16)指定した 16 ビットの符号なし整数値をバイト配列として返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートGetBytes(UInt32)指定した 32 ビットの符号なし整数値をバイト配列として返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートGetBytes(UInt64)指定した 64 ビットの符号なし整数値をバイト配列として返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートInt64BitsToDouble指定した 64 ビット符号付き整数を倍精度浮動小数点数に変換します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートToBooleanバイト配列内の指定位置にある 1 バイトから変換されたブール値を返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートToCharバイト配列内の指定位置にある 2 バイトから変換された Unicode 文字を返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートToDoubleバイト配列内の指定位置にある 8 バイトから変換された倍精度浮動小数点数を返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートToInt16バイト配列内の指定位置にある 2 バイトから変換された 16 ビット符号付き整数を返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートToInt32バイト配列内の指定位置にある 4 バイトから変換された 32 ビット符号付き整数を返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートToInt64バイト配列内の指定位置にある 8 バイトから変換された 64 ビット符号付き整数を返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートToSingleバイト配列内の指定位置にある 4 バイトから変換された単精度浮動小数点数を返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートToString(Byte[])指定されたバイト配列の各要素の数値をそれと等価な 16 進数文字列形式に変換します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートToString(Byte[], Int32)指定されたバイト サブ配列の各要素の数値をそれと等価な 16 進数文字列形式に変換します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートToString(Byte[], Int32, Int32)指定されたバイト サブ配列の各要素の数値をそれと等価な 16 進数文字列形式に変換します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートToUInt16バイト配列内の指定位置にある 2 バイトから変換された 16 ビット符号なし整数を返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートToUInt32バイト配列内の指定位置にある 4 バイトから変換された 32 ビット符号なし整数を返します。
パブリック メソッド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートToUInt64バイト配列内の指定位置にある 8 バイトから変換された 64 ビット符号なし整数を返します。
このページのトップへ

  名前説明
パブリック フィールド静的メンバーSilverlight for Windows Phone によるサポートXbox 360 によるサポートIsLittleEndianこのコンピューター アーキテクチャでデータが格納される際のバイト順 ("エンディアン") を示します。
このページのトップへ

BitConverter クラスは、基本的な形式の値型を、一連のバイトとして操作する場合に役立ちます。 1 バイトは、8 ビットの符号なし整数として定義されます。 次の表に示すように、BitConverter クラスには静的メソッドが含まれ、これによって、各プリミティブ型とバイトの配列の間で変換が行われます。

BitConverter メソッドをラウンド トリップのデータに使用する場合は、GetBytes オーバーロードと ToType メソッドが同じ型を指定していることを確認します。 次の例に示すように、ToUInt32 メソッドを呼び出して、符号付き整数を表す配列を復元すると、値が元の値とは異なる場合があります。 詳細については、BCL チームのブログのエントリ「署名のない 10 進とビットごとの値」を参照してください。


using System;

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      int value = -16;
      Byte[] bytes = BitConverter.GetBytes(value);

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


GetBytes メソッド オーバーロードで返される配列内のバイトの順序 (および DoubleToInt64Bits メソッドで返される整数内のビットの順序と、ToString(Byte[]) メソッドで返される 16 進数の文字列の順序) は、コンピューターのアーキテクチャが、リトル エンディアンとビッグ エンディアンのどちらであるかによって異なります。 アーキテクチャがエンディアンであることは、IsLittleEndian プロパティによって示されます。このプロパティは、リトル エンディアン システムでは true を、ビッグ エンディアン システムでは false を返します。 リトル エンディアン システムでは、下位バイトが上位バイトの前に付けられます。 ビッグ エンディアン システムでは、上位バイトが下位バイトの前に付けられます。 次の表は、整数 1,234,567,890 (0x499602D2) を GetBytes(Int32) メソッドに渡した結果、発生するバイト配列での違いを示しています。 バイトは、インデックス 0 のバイトからインデックス 3 のバイトへの順に一覧表示されます。

リトル エンディアン

D2-02-96-49

ビッグ エンディアン

49-96-02-D2

一部のメソッドの戻り値はシステム アーキテクチャに依存するため、マシン境界を超えてバイトのデータを送信するときは注意が必要です。

  • データを送受信するすべてのシステムが同じエンディアンであることが保証されている場合は、データを操作する必要はありません。

  • データの送受信のシステムが異なるエンディアンである場合は、常に特定の順序でデータを送信してください。 つまり、配列内のバイト順を、その送信前または受信後に逆転する必要がある可能性もあります。 一般的には、ネットワークでのバイト順 (ビッグ エンディアン順) でデータが送信されます。 次の例は、ネットワーク バイト順での整数値の送信の実装を示します。

    
    using System;
    
    public class Example
    {
       public static void Demo(System.Windows.Controls.TextBlock outputBlock)
       {
          int value = 12345678;
          byte[] bytes = BitConverter.GetBytes(value);
          outputBlock.Text += BitConverter.ToString(bytes) + "\n";
    
          if (BitConverter.IsLittleEndian)
             bytes = ReverseBytes(bytes);
    
          outputBlock.Text += BitConverter.ToString(bytes) + "\n";
          // Call method to send byte stream across machine boundaries.
    
          // Receive byte stream from beyond machine boundaries.
          outputBlock.Text += BitConverter.ToString(bytes) + "\n";
          if (BitConverter.IsLittleEndian)
             bytes = ReverseBytes(bytes);
    
          outputBlock.Text += BitConverter.ToString(bytes) + "\n";
          int result = BitConverter.ToInt32(bytes, 0);
          outputBlock.Text += String.Format("Original value: {0}", value) + "\n";
          outputBlock.Text += String.Format("Returned value: {0}", result) + "\n";
       }
    
       private static byte[] ReverseBytes(byte[] inArray)
       {
          byte temp;
          int highCtr = inArray.Length - 1;
    
          for (int ctr = 0; ctr < inArray.Length / 2; ctr++)
          {
             temp = inArray[ctr];
             inArray[ctr] = inArray[highCtr];
             inArray[highCtr] = temp;
             highCtr -= 1;
          }
          return inArray;
       }
    }
    // The example displays the following output on a little-endian system:
    //       4E-61-BC-00
    //       00-61-BC-4E
    //       00-61-BC-4E
    //       4E-61-BC-00
    //       Original value: 12345678
    //       Returned value: 12345678
    
    
    
  • データの送受信システムが別のエンディアンである可能性があり、送信するデータが符号付き整数で構成されている場合は、IPAddress.HostToNetworkOrder メソッドを呼び出してネットワーク バイト順にデータを変換し、IPAddress.NetworkToHostOrder メソッドを呼び出して受信者に必要な順序にデータを変換します。

BitConverter クラスの一部のメソッドの使用方法を次のコード例に示します。


// Example of BitConverter class methods.
using System;

class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      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;

      outputBlock.Text +=
          "This example of methods of the BitConverter class" +
          "\ngenerates the following output.\n" + "\n";
      outputBlock.Text += String.Format(formatter, "argument", "byte array") + "\n";
      outputBlock.Text += String.Format(formatter, "--------", "----------") + "\n";

      // Convert values to Byte arrays and display them.
      outputBlock.Text += String.Format(formatter, aDoubl,
          BitConverter.ToString(BitConverter.GetBytes(aDoubl))) + "\n";
      outputBlock.Text += String.Format(formatter, aSingl,
          BitConverter.ToString(BitConverter.GetBytes(aSingl))) + "\n";
      outputBlock.Text += String.Format(formatter, aLong,
          BitConverter.ToString(BitConverter.GetBytes(aLong))) + "\n";
      outputBlock.Text += String.Format(formatter, anInt,
          BitConverter.ToString(BitConverter.GetBytes(anInt))) + "\n";
      outputBlock.Text += String.Format(formatter, aShort,
          BitConverter.ToString(BitConverter.GetBytes(aShort))) + "\n";
      outputBlock.Text += String.Format(formatter, aChar,
          BitConverter.ToString(BitConverter.GetBytes(aChar))) + "\n";
      outputBlock.Text += String.Format(formatter, aBool,
          BitConverter.ToString(BitConverter.GetBytes(aBool))) + "\n";
   }
}

/*
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
*/


Silverlight

サポート対象 : 5、4、3

Silverlight for Windows Phone

サポート対象 : Windows Phone OS 7.1、Windows Phone OS 7.0

XNA Framework

サポート対象 : Xbox 360、Windows Phone OS 7.0

Silverlight でサポートされるオペレーティング システムの詳細については、「サポートされているオペレーティング システムとブラウザー」を参照してください。

この型のすべてのパブリック static (Visual Basic では Shared) メンバーは、スレッド セーフです。 インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

コミュニティの追加

追加
表示: