情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Byte 構造体

2013/12/12

8 ビット符号なし整数を表します。

Namespace:  System
アセンブリ:  mscorlib (mscorlib.dll 内)

public struct Byte : IComparable, IComparable<byte>, 
	IConvertible, IEquatable<byte>, IFormattable

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

  名前説明
パブリック メソッドCompareTo(Byte)指定した 8 ビット符号なし整数とこのインスタンスを比較し、これらの相対値を示す値を返します。
パブリック メソッドCompareTo(Object)指定されたオブジェクトとこのインスタンスを比較して、これらの相対値を示す値を返します。
パブリック メソッドEquals(Byte)このインスタンスと指定した Byte オブジェクトが同じ値を表しているかどうかを示す値を返します。
パブリック メソッドEquals(Object)指定されたオブジェクトとこのインスタンスが等しいかどうかを示す値を返します。 (ValueType.Equals(Object) をオーバーライドします。)
プロテクト メソッドFinalizeObject がガベージ コレクションで再利用される前に、Object がリソースを解放して他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。)
パブリック メソッドGetHashCodeこのインスタンスのハッシュ コードを返します。 (ValueType.GetHashCode() をオーバーライドします。)
パブリック メソッドGetType現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッドGetTypeCodeByte 値型の TypeCode を返します。
プロテクト メソッドMemberwiseClone現在の Object の簡易コピーを作成します。 (Object から継承されます。)
パブリック メソッド静的メンバーParse(String)数値の文字列形式を、それと等価の Byte に変換します。
パブリック メソッド静的メンバーParse(String, NumberStyles)指定のスタイルで表現された数値の文字列形式を、それと等価な Byte に変換します。
パブリック メソッド静的メンバーParse(String, IFormatProvider)指定されたカルチャ固有の書式で表現された文字列形式の数値を、それと等価の Byte に変換します。
パブリック メソッド静的メンバーParse(String, NumberStyles, IFormatProvider)指定したスタイルおよびカルチャ固有の書式の数値の文字列形式を、それと等価の Byte に変換します。
パブリック メソッドToString()現在の Byte オブジェクトの値を等価の文字列形式に変換します。 (ValueType.ToString() をオーバーライドします。)
パブリック メソッドToString(IFormatProvider)指定したカルチャ固有の書式情報を使用して、現在の Byte オブジェクトの数値をそれと等価の文字列形式に変換します。
パブリック メソッドToString(String)指定した書式を使用して、現在の Byte オブジェクトの値をそれと等価な文字列形式に変換します。
パブリック メソッドToString(String, IFormatProvider)指定した書式およびカルチャ固有の書式情報を使用して、現在の Byte オブジェクトの値をそれと等価の文字列形式に変換します。
パブリック メソッド静的メンバーTryParse(String, Byte)数値の文字列形式を対応する Byte 表現に変換できるかどうかを試行し、変換に成功したかどうかを示す値を返します。
パブリック メソッド静的メンバーTryParse(String, NumberStyles, IFormatProvider, Byte)指定したスタイルおよびカルチャ固有の書式の数値の文字列形式を、それと等価の Byte に変換します。戻り値は、変換が成功したか失敗したかを示します。
このページのトップへ

  名前説明
パブリック フィールド静的メンバーMaxValueByte の最大有効値を表します。このフィールドは定数です。
パブリック フィールド静的メンバーMinValueByte の最小有効値を表します。このフィールドは定数です。
このページのトップへ

  名前説明
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToBooleanインフラストラクチャ。 このメンバーの説明については、IConvertible.ToBoolean のトピックを参照してください。
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToByteインフラストラクチャ。 このメンバーの説明については、IConvertible.ToByte のトピックを参照してください。
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToCharインフラストラクチャ。 このメンバーの説明については、IConvertible.ToChar のトピックを参照してください。
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToDateTimeインフラストラクチャ。 この変換はサポートされません。このメソッドを使用しようとすると、InvalidCastException がスローされます。
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToDecimalインフラストラクチャ。 このメンバーの説明については、IConvertible.ToDecimal のトピックを参照してください。
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToDoubleインフラストラクチャ。 このメンバーの説明については、IConvertible.ToDouble のトピックを参照してください。
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToInt16インフラストラクチャ。 このメンバーの説明については、IConvertible.ToInt16 のトピックを参照してください。
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToInt32インフラストラクチャ。 このメンバーの説明については、IConvertible.ToInt32 のトピックを参照してください。
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToInt64インフラストラクチャ。 このメンバーの説明については、IConvertible.ToInt64 のトピックを参照してください。
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToSByteインフラストラクチャ。 このメンバーの説明については、IConvertible.ToSByte のトピックを参照してください。
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToSingleインフラストラクチャ。 このメンバーの説明については、IConvertible.ToSingle のトピックを参照してください。
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToTypeインフラストラクチャ。 このメンバーの説明については、IConvertible.ToType のトピックを参照してください。
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToUInt16インフラストラクチャ。 このメンバーの説明については、IConvertible.ToUInt16 のトピックを参照してください。
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToUInt32インフラストラクチャ。 このメンバーの説明については、IConvertible.ToUInt32 のトピックを参照してください。
明示的なインターフェイスの実装プライベート メソッドIConvertible.ToUInt64インフラストラクチャ。 このメンバーの説明については、IConvertible.ToUInt64 のトピックを参照してください。
このページのトップへ

Byte は、符号なし整数を表す不変の値型です。その整数値の範囲は、0 (定数 Byte.MinValue で表される) ~ 255 (定数 Byte.MaxValue で表される) です。.NET Framework には、-128 ~ +127 の範囲の値を表す符号付き 8 ビットの整数値型 SByte も含まれています。

バイト値のインスタンス化

Byte 値のインスタンスを作成するには、いくつかの方法があります。

  • Byte 変数を宣言し、それに、Byte データ型の範囲内にあるリテラル整数の値を割り当てることができます。次の使用例は、2 つの Byte 変数を宣言し、それらに、この方法で値を割り当てます。

    
    byte value1 = 64;
    byte value2 = 255;
    
    
    
  • バイト以外の数値をバイトに割り当てることができます。これは縮小変換であるため、OptionStrict がオンの場合は、キャスト演算子 (C# の場合) および変換メソッド (Visual Basic の場合) が必要になります。バイト以外の値が SingleDouble、または小数部を含む Decimal 値の場合は、その小数部が切り捨てられます。Byte 変数にいくつかの数値を代入する例を次に示します。

    
    int int1 = 128;
    try
    {
       byte value1 = (byte)int1;
       outputBlock.Text += value1 + Environment.NewLine;
    }
    catch (OverflowException)
    {
       outputBlock.Text += String.Format("{0} is out of range of a byte.", int1) + "\n";
    }
    
    double dbl2 = 3.997;
    try
    {
       byte value2 = (byte)dbl2;
       outputBlock.Text += value2 + "\n";
    }
    catch (OverflowException)
    {
       outputBlock.Text += String.Format("{0} is out of range of a byte.", dbl2) + "\n";
    }
    // The example displays the following output:
    //       128
    //       3      
    
    
    
  • Convert クラスのメソッドを呼び出して、サポートされる任意の型を Byte 値に変換できます。これが可能なのは、ByteIConvertible インターフェイスをサポートしているからです。Int32 値の配列の、Byte 値への変換を次の例に示します。

    
    int[] numbers = { Int32.MinValue, -1, 0, 121, 340, Int32.MaxValue };
    byte result;
    foreach (int number in numbers)
    {
       try
       {
          result = Convert.ToByte(number);
          outputBlock.Text += String.Format("Converted the {0} value {1} to the {2} value {3}.",
                            number.GetType().Name, number,
                            result.GetType().Name, result) + "\n";
       }
       catch (OverflowException)
       {
          outputBlock.Text += String.Format("The {0} value {1} is outside the range of the Byte type.",
                            number.GetType().Name, number) + "\n";
       }
    }
    // The example displays the following output:
    //       The Int32 value -2147483648 is outside the range of the Byte type.
    //       The Int32 value -1 is outside the range of the Byte type.
    //       Converted the Int32 value 0 to the Byte value 0.
    //       Converted the Int32 value 121 to the Byte value 121.
    //       The Int32 value 340 is outside the range of the Byte type.
    //       The Int32 value 2147483647 is outside the range of the Byte type.      
    
    
    
  • Parse または TryParse メソッドを呼び出して、文字列で表現された ByteByte に変換できます。文字列には、10 進数または 16 進数の数字を含めることができます。次の例は、10 進数と 16 進数の文字列の両方を使用して、解析操作を示しています。

    
    string string1 = "244";
    try
    {
       byte byte1 = Byte.Parse(string1);
       outputBlock.Text += byte1 + "\n";
    }
    catch (OverflowException)
    {
       outputBlock.Text += String.Format("'{0}' is out of range of a byte.", string1) + "\n";
    }
    catch (FormatException)
    {
       outputBlock.Text += String.Format("'{0}' is out of range of a byte.", string1) + "\n";
    }
    
    string string2 = "F9";
    try
    {
       byte byte2 = Byte.Parse(string2,
                               System.Globalization.NumberStyles.HexNumber);
       outputBlock.Text += byte2 + "\n";
    }
    catch (OverflowException)
    {
       outputBlock.Text += String.Format("'{0}' is out of range of a byte.", string2) + "\n";
    }
    catch (FormatException)
    {
       outputBlock.Text += String.Format("'{0}' is out of range of a byte.", string2) + "\n";
    }
    // The example displays the following output:
    //       244
    //       249
    
    
    

バイト値に対する処理の実行

Byte は、標準の算術演算 (加算、減算、除算、乗算、否定、単項否定など) をサポートしています。他の整数型と同様に、Byte 型も、ビットごとの AND 演算、OR 演算、XOR 演算、左シフト演算、右シフト演算をサポートしています。

標準の数値演算子を使用して 2 つの Byte 値を比較するか、CompareTo メソッドまたは Equals メソッドを呼び出すことができます。

文字列としてのバイトの表記

Byte 型では、標準およびカスタムの数値書式指定文字列が完全にサポートされます。ただし、ほとんどの場合は、バイト値が、追加書式なしの 1 ~ 3 桁の値として、または 2 桁の 16 進値として表されます。

Byte 値の書式を、先行ゼロのない整数文字列として設定するには、パラメーターなしの ToString() メソッドを呼び出すことができます。"D" 書式指定子を使用すると、指定した数の先行ゼロを文字列表記に含めることができます。"X" 書式指定子を使用すると、Byte 値を 16 進文字列として表記できます。次の例では、この 3 つの方法で、Byte 値の配列の要素を書式設定します。


outputBlock.FontFamily = new System.Windows.Media.FontFamily("Courier New");

byte[] numbers = { 0, 16, 104, 213 };
foreach (byte number in numbers)
{
   // Display value using default formatting.
   outputBlock.Text += String.Format("{0,-3}  -->   ", number.ToString());
   // Display value with 3 digits and leading zeros.
   outputBlock.Text += number.ToString("D3") + "   ";
   // Display value with hexadecimal.
   outputBlock.Text += number.ToString("X2") + "   ";
   // Display value with four hexadecimal digits.
   outputBlock.Text += number.ToString("X4") + "\n";
}
// The example displays the following output:
//       0    -->   000   00   0000
//       16   -->   016   10   0010
//       104  -->   104   68   0068
//       213  -->   213   D5   00D5      


ToString(Byte, Int32) メソッドを呼び出して、2 番目のパラメーターとして基数を指定することによって、Byte 値をバイナリ、8 進数、10 進数、または 16 進文字列として書式設定することもできます。このメソッドを呼び出して、バイト値配列のバイナリ、8 進数、および 16 進数の表記を表す例を次に示します。


byte[] numbers = { 0, 16, 104, 213 };
outputBlock.Text += String.Format("{0}   {1,8}   {2,5}   {3,5}",
                  "Value", "Binary", "Octal", "Hex") + "\n";
foreach (byte number in numbers)
{
   outputBlock.Text += String.Format("{0,5}   {1,8}   {2,5}   {3,5}",
                     number, Convert.ToString(number, 2),
                     Convert.ToString(number, 8),
                     Convert.ToString(number, 16)) + "\n";
}
// The example displays the following output:
//       Value     Binary   Octal     Hex
//           0          0       0       0
//          16      10000      20      10
//         104    1101000     150      68
//         213   11010101     325      d5      


非 10 進数のバイト型の値の操作

個々 のバイト数を 10 進値として処理するだけでなく、バイト値でのビットごとの演算、バイト配列の処理、バイト値のバイナリ表記または 16 進表記の処理を実行できます。たとえば、BitConverter.GetBytes メソッドのオーバーロードは、プリミティブ データ型をバイト配列に変換できます。

Byte 値は、その 8 ビット単位の絶対値によってのみ表記され、符号ビットは含まれません。これは、Byte 値のビットごとの演算を実行する場合や、個々のビットを操作する場合に注意が必要な重要事項です。数値、ブール型 (Boolean) の値、または 2 つの非 10 進値の比較操作を実行するには、両方の値の表記が同じである必要があります。

2 つの Byte 値で操作を実行すると、それらが同じ表現を共有するため、正確な結果が得られます。これは、Byte 値の最下位ビットが偶数になるようにマスクされている次の例に示されています。


using System;
using System.Globalization;

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      string[] values = { Convert.ToString(12, 16), 
                          Convert.ToString(123, 16), 
                          Convert.ToString(245, 16) };

      byte mask = 0xFE;
      foreach (string value in values)
      {
         Byte byteValue = Byte.Parse(value, NumberStyles.AllowHexSpecifier);
         outputBlock.Text += String.Format("{0} And {1} = {2}", byteValue, mask,
                           byteValue & mask) + "\n";
      }
   }
}
// The example displays the following output:
//       12 And 254 = 12
//       123 And 254 = 122
//       245 And 254 = 244


一方、符号なしと符号付きの両方のビットを使用する場合は、SByte 値が、正の値には符号および絶対値による表記を、負の値には 2 の補数表記を使用するために、ビットごとの演算が複雑になります。意味のあるビットごとの演算を実行するには、値を、2 つの同じ表記に変換し、符号ビットに関する情報を保持する必要があります。次の例では、これを実行して、8 ビットの符号付きおよび符号なしの値の配列のビット 2 と 4 をマスクします。


using System;
using System.Collections.Generic;
using System.Globalization;

public struct ByteString
{
   public string Value;
   public int Sign;
}

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      ByteString[] values = CreateArray(-15, 123, 245);

      byte mask = 0x14;        // Mask all bits but 2 and 4.

      foreach (ByteString strValue in values)
      {
         byte byteValue = Byte.Parse(strValue.Value, NumberStyles.AllowHexSpecifier);
         outputBlock.Text += String.Format("{0} ({1}) And {2} ({3}) = {4} ({5})",
                           strValue.Sign * byteValue,
                           Convert.ToString(byteValue, 2),
                           mask, Convert.ToString(mask, 2),
                           (strValue.Sign & Math.Sign(mask)) * (byteValue & mask),
                           Convert.ToString(byteValue & mask, 2)) + "\n";
      }
   }

   private static ByteString[] CreateArray(params int[] values)
   {
      List<ByteString> byteStrings = new List<ByteString>();

      foreach (object value in values)
      {
         ByteString temp = new ByteString();
         int sign = Math.Sign((int)value);
         temp.Sign = sign;

         // Change two's complement to magnitude-only representation.
         temp.Value = Convert.ToString(((int)value) * sign, 16);

         byteStrings.Add(temp);
      }
      return byteStrings.ToArray();
   }
}
// The example displays the following output:
//       -15 (1111) And 20 (10100) = 4 (100)
//       123 (1111011) And 20 (10100) = 16 (10000)
//       245 (11110101) And 20 (10100) = 20 (10100)


Windows Phone OS

サポート: 8.0, 7.1, 7.0

この型のすべてのメンバーはスレッド セーフです。インスタンスの状態を変更するように見えるメンバーは、実際には新しい値を使用して初期化された新しいインスタンスを返します。他の型と同じように、確実なスレッド セーフを実現するには、この型のインスタンスを含む共有変数の読み取りと書き込みをロックによって保護する必要があります。

表示: