BigInteger.ToByteArray Metoda

Definice

Přetížení

Name Description
ToByteArray()

BigInteger Převede hodnotu na pole bajtů.

ToByteArray(Boolean, Boolean)

Vrátí hodnotu této BigInteger hodnoty jako bajtové pole s použitím nejmenšího možného počtu bajtů. Pokud je hodnota nula, vrátí pole jednoho bajtu, jehož prvek je 0x00.

ToByteArray()

Zdroj:
BigInteger.cs
Zdroj:
BigInteger.cs
Zdroj:
BigInteger.cs
Zdroj:
BigInteger.cs
Zdroj:
BigInteger.cs

BigInteger Převede hodnotu na pole bajtů.

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řevedena na pole bajtů.

Příklady

Následující příklad ukazuje, jak jsou některé BigInteger hodnoty reprezentovány v bajtových polích.

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
open System
open System.Numerics

let numbers =
    [| BigInteger.MinusOne
       BigInteger.One
       BigInteger.Zero
       120
       128
       255
       1024
       Int64.MinValue
       Int64.MaxValue
       BigInteger.Parse("90123123981293054321") |]

for number in numbers do
    let bytes = number.ToByteArray()
    printf $"""{number} ({number.ToString("X" + (bytes.Length * 2).ToString())}) -> """
    printf $"{bytes.Length} bytes: "

    for byteValue in bytes do
        printf $"{byteValue:X2} "

    printfn ""

// 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 zobrazují v malém pořadí. To znamená, že bajty nižšího pořadí hodnoty před bajty vyššího řádu. První bajt pole odráží prvních osm bitů BigInteger hodnoty, druhý bajt odráží dalších osm bitů atd. Například hodnota 1024 nebo 0x0400 je uložena jako následující pole dvou bajtů:

prvek Bajtová hodnota
0 0x00
1 0x04

Záporné hodnoty se zapisují do pole pomocí reprezentace dvou doplňků v nejkomprimovanější podobě. Například -1 je reprezentována jako jeden bajt, jehož hodnota je 0xFF namísto pole s více prvky, jako 0xFFje například , 0xFF nebo 0xFF, 0xFF0xFF, . 0xFF

Vzhledem k tomu, že reprezentace dvou doplňků vždy interpretuje bit s nejvyšším pořadím posledního bajtu v matici (bajt na pozici Array.Length- 1) jako bit znaménka, vrátí metoda bajtové pole s dodatečným prvkem, jehož hodnota je nula, aby bylo možné nejednoznačné kladné hodnoty, které by jinak bylo možné interpretovat jako jejich znaménka sady bitů. Například hodnota 120 nebo 0x78 je reprezentována jako jednobajtů pole: 0x78. Nicméně, 128, nebo 0x80, je reprezentován jako dvoubajtů pole: 0x80, 0x00.

Hodnotu můžete zaokrouhlit BigInteger tak, že ji uložíte do pole bajtů a pak ji obnovíte pomocí konstruktoru BigInteger(Byte[]) .

Caution

Pokud váš kód upraví hodnotu jednotlivých bajtů v poli vrácené touto metodou před obnovením hodnoty, je nutné zajistit, abyste neúmyslně nezměnili bit znaménka. Pokud například vaše úpravy zvětší kladnou hodnotu tak, aby se nastavil bit nejvyššího pořadí v posledním prvku pole bajtů, můžete přidat nový bajt, jehož hodnota je nula na konec pole.

Platí pro

ToByteArray(Boolean, Boolean)

Zdroj:
BigInteger.cs
Zdroj:
BigInteger.cs
Zdroj:
BigInteger.cs
Zdroj:
BigInteger.cs
Zdroj:
BigInteger.cs

Vrátí hodnotu této BigInteger hodnoty jako bajtové pole s použitím nejmenšího možného počtu bajtů. Pokud je hodnota nula, vrátí pole jednoho bajtu, jehož prvek je 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

truepoužívat kódování bez znaménka; v opačném případě . false

isBigEndian
Boolean

truepsát bajty v pořadí velkých bajtů; v opačném případě . false

Návraty

Byte[]

Hodnota aktuálního BigInteger objektu převedena na pole bajtů.

Výjimky

Pokud isUnsigned je true a Sign je záporná.

Poznámky

Celočíselná hodnota 33022 se dá exportovat ve čtyřech různých polích:

Properties Výsledek
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