BigInteger.ToByteArray BigInteger.ToByteArray BigInteger.ToByteArray BigInteger.ToByteArray Method

Definice

Přetížení

ToByteArray() ToByteArray() ToByteArray() ToByteArray()

BigInteger Převede hodnotu na pole bajtů.Converts a BigInteger value to a byte array.

ToByteArray(Boolean, Boolean) ToByteArray(Boolean, Boolean) ToByteArray(Boolean, Boolean)

Vrátí hodnotu tohoto BigInteger pole jako bajtové pole s použitím nejmenšího možného počtu bajtů.Returns the value of this BigInteger as a byte array using the fewest number of bytes possible. Pokud je hodnota nula, vrátí pole jednoho bajtu, jehož element je 0x00.If the value is zero, returns an array of one byte whose element is 0x00.

ToByteArray() ToByteArray() ToByteArray() ToByteArray()

BigInteger Převede hodnotu na pole bajtů.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()

Návraty

Byte[]

Hodnota aktuálního BigInteger objektu převedená na pole bajtů.The value of the current BigInteger object converted to an array of bytes.

Příklady

Následující příklad znázorňuje, jak jsou BigInteger některé hodnoty zastoupeny v bajtových polích.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

Poznámky

Jednotlivé bajty v poli vrácené touto metodou se zobrazí v pořadí little endian.The individual bytes in the array returned by this method appear in little-endian order. To znamená, že bajty nižšího řádu hodnoty předcházejí bajty vyššího řádu.That is, the lower-order bytes of the value precede the higher-order bytes. První bajt pole odráží prvních osm bitů BigInteger hodnoty, druhý Byte odráží dalších osm bitů a tak dále.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. Například hodnota 1024 nebo 0x0400 je uložena jako následující pole dvou bajtů:For example, the value 1024, or 0x0400, is stored as the following array of two bytes:

PrvekElement Hodnota ByteByte value
00 0x000x00
11 0x040x04

Záporné hodnoty jsou zapsány do pole pomocí dvou reprezentace doplňku ve většině možností kompaktního formátu.Negative values are written to the array using two's complement representation in the most compact form possible. Například hodnota-1 je reprezentovaná jako jeden bajt, jehož hodnota je 0xFF místo pole s více prvky, 0xFFjako například, 0xFF nebo 0xFF, 0xFF 0xFF,, 0xFF.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.

Vzhledem k tomu, že dvě reprezentace doplňku vždycky interpretuje bit nejvyšší hodnoty posledního bajtu v poli (bajt na pozici Array.Length - 1) jako znaménko, metoda vrátí bajtové pole s nadbytečným elementem, jehož hodnota je nula. jednoznačné hodnoty, které by jinak bylo možné interpretovat jako sadu jejich podpisových bitů.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. Například hodnota 120 nebo 0x78 je reprezentovaná jako pole s jedním bajtem:. 0x78For example, the value 120 or 0x78 is represented as a single-byte array: 0x78. 128, nebo 0x80, je-li však reprezentován jako pole se dvěma bajty: 0x80, 0x00.However, 128, or 0x80, is represented as a two-byte array: 0x80, 0x00.

BigInteger Hodnotu můžete vyhodnotit tak, že ji uložíte do pole bajtů a pak ji obnovíte BigInteger(Byte[]) pomocí konstruktoru.You can round-trip a BigInteger value by storing it to a byte array and then restoring it using the BigInteger(Byte[]) constructor.

Upozornění

Pokud kód upraví hodnotu jednotlivých bajtů v poli, které tato metoda vrátila před tím, než obnoví hodnotu, je nutné zajistit, aby nedošlo k neúmyslnému změně bitu znaménka.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. Například pokud vaše úpravy zvyšují kladnou hodnotu tak, aby se v posledním prvku bajtového pole nastavil bit nejvyšší kategorie, můžete přidat nový bajt, jehož hodnota je nula až na konec pole.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) ToByteArray(Boolean, Boolean) ToByteArray(Boolean, Boolean)

Vrátí hodnotu tohoto BigInteger pole jako bajtové pole s použitím nejmenšího možného počtu bajtů.Returns the value of this BigInteger as a byte array using the fewest number of bytes possible. Pokud je hodnota nula, vrátí pole jednoho bajtu, jehož element je 0x00.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()

Parametry

isUnsigned
Boolean Boolean Boolean Boolean

trueChcete-li použít kódování bez znaménka; v opačném případě. falsetrue to use unsigned encoding; otherwise, false.

isBigEndian
Boolean Boolean Boolean Boolean

truezápis bajtů v pořadí bytů big-endian; v opačném případě. falsetrue to write the bytes in a big-endian byte order; otherwise, false.

Návraty

Byte[]

Hodnota aktuálního BigInteger objektu převedená na pole bajtů.The value of the current BigInteger object converted to an array of bytes.

Výjimky

Pokud isUnsigned je true aSign je záporné.If isUnsigned is true and Sign is negative.

Poznámky

Celočíselná hodnota 33022 může být exportována ve čtyřech různých polích:The integer value 33022 can be exported in four different arrays:

VlastnostiProperties VýsledekResult
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 }

Platí pro