BigInteger.ToByteArray メソッド

定義

オーバーロード

ToByteArray()

BigInteger 値をバイト配列に変換します。Converts a BigInteger value to a byte array.

ToByteArray(Boolean, Boolean)

使用できる最も少ないバイト数を使用して、この BigInteger の値をバイト配列として返します。Returns the value of this BigInteger as a byte array using the fewest number of bytes possible. 値が 0 の場合は、その要素が 0x00 である 1 バイトの配列を返します。If the value is zero, returns an array of one byte whose element is 0x00.

ToByteArray()

BigInteger 値をバイト配列に変換します。Converts a BigInteger value to a byte array.

public:
 cli::array <System::Byte> ^ ToByteArray();
public byte[] ToByteArray ();
member this.ToByteArray : unit -> byte[]
Public Function ToByteArray () As Byte()

戻り値

Byte[]

現在の BigInteger オブジェクトをバイトの配列に変換した値。The value of the current BigInteger object converted to an array of bytes.

次の例は、BigInteger 値の一部がバイト配列でどのように表現されるかを示しています。The following example illustrates how some BigInteger values are represented in byte arrays.

using System;
using System.Numerics;

public class Example
{
   static byte[] bytes;
   
   public static void Main()
   {
      BigInteger[] numbers = { BigInteger.MinusOne, BigInteger.One, 
                               BigInteger.Zero, 120, 128, 255, 1024, 
                               Int64.MinValue, Int64.MaxValue, 
                               BigInteger.Parse("90123123981293054321") };
      foreach (BigInteger number in numbers)
      {
         bytes = number.ToByteArray();
         Console.Write("{0} ({1}) -> ", number, number.ToString(GetSpecifier()));
         Console.Write("{0} bytes: ", bytes.Length);
         foreach (byte byteValue in bytes)
            Console.Write("{0:X2} ", byteValue);

         Console.WriteLine();
      }   
   }

   private static string GetSpecifier()
   {
      return "X" + (bytes.Length * 2).ToString();
   }
}
// The example displays the following output:
//    -1 (FF) -> 1 bytes: FF
//    1 (01) -> 1 bytes: 01
//    0 (00) -> 1 bytes: 00
//    120 (78) -> 1 bytes: 78
//    128 (0080) -> 2 bytes: 80 00
//    255 (00FF) -> 2 bytes: FF 00
//    1024 (0400) -> 2 bytes: 00 04
//    -9223372036854775808 (8000000000000000) -> 8 bytes: 00 00 00 00 00 00 00 80
//    9223372036854775807 (7FFFFFFFFFFFFFFF) -> 8 bytes: FF FF FF FF FF FF FF 7F
//    90123123981293054321 (04E2B5A7C4A975E971) -> 9 bytes: 71 E9 75 A9 C4 A7 B5 E2 04
Imports System.Numerics

Module Example
   Dim bytes() As Byte
      
   Public Sub Main()
      Dim numbers() As BigInteger = { BigInteger.MinusOne, BigInteger.One, 
                                      BigInteger.Zero, 120, 128, 255, 1024, 
                                      Int64.MinValue, Int64.MaxValue, 
                                      BigInteger.Parse("90123123981293054321") }
      For Each number As BigInteger In numbers
         bytes = number.ToByteArray()
         Console.Write("{0} ({1}) -> ", number, number.ToString(GetSpecifier()))
         Console.Write("{0} bytes: ", bytes.Length)
         For Each byteValue As Byte In bytes
            Console.Write("{0:X2} ", byteValue)
         Next
         Console.WriteLine()
      Next   
   End Sub
   
   Private Function GetSpecifier() As String
      Return "X" + CStr(bytes.Length * 2)
   End Function
End Module
' The example displays the following output:
'    -1 (FF) -> 1 bytes: FF
'    1 (01) -> 1 bytes: 01
'    0 (00) -> 1 bytes: 00
'    120 (78) -> 1 bytes: 78
'    128 (0080) -> 2 bytes: 80 00
'    255 (00FF) -> 2 bytes: FF 00
'    1024 (0400) -> 2 bytes: 00 04
'    -9223372036854775808 (8000000000000000) -> 8 bytes: 00 00 00 00 00 00 00 80
'    9223372036854775807 (7FFFFFFFFFFFFFFF) -> 8 bytes: FF FF FF FF FF FF FF 7F
'    90123123981293054321 (04E2B5A7C4A975E971) -> 9 bytes: 71 E9 75 A9 C4 A7 B5 E2 04

注釈

このメソッドによって返される配列内の個々のバイトは、リトルエンディアン順に表示されます。The individual bytes in the array returned by this method appear in little-endian order. つまり、値の下位バイトが上位バイトの前に配置されます。That is, the lower-order bytes of the value precede the higher-order bytes. 配列の最初のバイトは、BigInteger 値の最初の8ビットを反映し、2番目のバイトは次の8ビットを反映します。The first byte of the array reflects the first eight bits of the BigInteger value, the second byte reflects the next eight bits, and so on. たとえば、値 1024 (0x0400) は、次の2バイトの配列として格納されます。For example, the value 1024, or 0x0400, is stored as the following array of two bytes:

要素Element バイト値Byte value
00 0x000x00
11 0x040x04

負の値は、最もコンパクトな形式の2つの補数表現を使用して配列に書き込まれます。Negative values are written to the array using two's complement representation in the most compact form possible. たとえば、-1 は、0xFF0xFF または 0xFF0xFF0xFF0xFFなどの複数の要素を持つ配列としてではなく、値が 0xFF である1バイトとして表されます。For example, -1 is represented as a single byte whose value is 0xFF instead of as an array with multiple elements, such as 0xFF, 0xFF or 0xFF, 0xFF, 0xFF, 0xFF.

2つの補数表現は、配列内の最後のバイトの最上位ビット (位置 Array.Length- 1) を符号ビットとして常に解釈するため、メソッドは、符号ビットが設定されていると解釈される可能性がある正の値を明確にするための値が0である余分な要素を含むバイト配列を返します。Because two's complement representation always interprets the highest-order bit of the last byte in the array (the byte at position Array.Length- 1) as the sign bit, the method returns a byte array with an extra element whose value is zero to disambiguate positive values that could otherwise be interpreted as having their sign bits set. たとえば、値120または 0x78 は、0x78の1バイト配列として表されます。For example, the value 120 or 0x78 is represented as a single-byte array: 0x78. ただし、128、または 0x80は、0x800x00の2バイト配列として表されます。However, 128, or 0x80, is represented as a two-byte array: 0x80, 0x00.

BigInteger 値をバイト配列に格納し、BigInteger(Byte[]) コンストラクターを使用してそれを復元することにより、その値をラウンドトリップできます。You can round-trip a BigInteger value by storing it to a byte array and then restoring it using the BigInteger(Byte[]) constructor.

注意事項

コードで値を復元する前に、このメソッドによって返される配列内の個々のバイトの値を変更する場合は、符号ビットを誤って変更しないようにする必要があります。If your code modifies the value of individual bytes in the array returned by this method before it restores the value, you must make sure that you do not unintentionally change the sign bit. たとえば、バイト配列の最後の要素の最上位ビットが設定されるように、変更によって正の値が増加した場合、値が0である新しいバイトを配列の末尾に追加できます。For example, if your modifications increase a positive value so that the highest-order bit in the last element of the byte array becomes set, you can add a new byte whose value is zero to the end of the array.

ToByteArray(Boolean, Boolean)

使用できる最も少ないバイト数を使用して、この BigInteger の値をバイト配列として返します。Returns the value of this BigInteger as a byte array using the fewest number of bytes possible. 値が 0 の場合は、その要素が 0x00 である 1 バイトの配列を返します。If the value is zero, returns an array of one byte whose element is 0x00.

public byte[] ToByteArray (bool isUnsigned = false, bool isBigEndian = false);
member this.ToByteArray : bool * bool -> byte[]
Public Function ToByteArray (Optional isUnsigned As Boolean = false, Optional isBigEndian As Boolean = false) As Byte()

パラメーター

isUnsigned
Boolean

符号なしのエンコードを使用するには true。それ以外の場合は falsetrue to use unsigned encoding; otherwise, false.

isBigEndian
Boolean

ビッグ エンディアンのバイト順にバイトを書き込む場合は true。それ以外の場合は falsetrue to write the bytes in a big-endian byte order; otherwise, false.

戻り値

Byte[]

現在の BigInteger オブジェクトをバイトの配列に変換した値。The value of the current BigInteger object converted to an array of bytes.

例外

isUnsignedtrue で、Sign が負の値の場合。If isUnsigned is true and Sign is negative.

注釈

33022 整数値は、次の4つの異なる配列でエクスポートできます。The integer value 33022 can be exported in four different arrays:

PropertiesProperties 結果Result
isUnsigned: false, isBigEndian: false new byte[] { 0xFE, 0x80, 0x00 }
isUnsigned: false, isBigEndian: true new byte[] { 0x00, 0x80, 0xFE }
isUnsigned: true, isBigEndian: false new byte[] { 0xFE, 0x80 }
isUnsigned: true, isBigEndian: true new byte[] { 0x80, 0xFE }

適用対象