BigInteger.ToByteArray Metoda

Definicja

Przeciążenia

ToByteArray()

Konwertuje BigInteger wartość na tablicę bajtów.

ToByteArray(Boolean, Boolean)

Zwraca wartość tej BigInteger wartości jako tablicę bajtów przy użyciu najmniejszej możliwej liczby bajtów. Jeśli wartość ma wartość zero, zwraca tablicę jednego bajtu, którego element jest 0x00.

ToByteArray()

Źródło:
BigInteger.cs
Źródło:
BigInteger.cs
Źródło:
BigInteger.cs

Konwertuje BigInteger wartość na tablicę bajtów.

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

Zwraca

Byte[]

Wartość bieżącego BigInteger obiektu przekonwertowanego na tablicę bajtów.

Przykłady

W poniższym przykładzie pokazano, jak niektóre BigInteger wartości są reprezentowane w tablicach bajtów.

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

Uwagi

Poszczególne bajty w tablicy zwróconej przez tę metodę są wyświetlane w kolejności małej. Oznacza to, że bajty niższej kolejności wartości poprzedzają bajty wyższego zamówienia. Pierwszy bajt tablicy odzwierciedla pierwsze osiem bitów BigInteger wartości, drugi bajt odzwierciedla następne osiem bitów itd. Na przykład wartość 1024 lub 0x0400 jest przechowywana jako następująca tablica dwóch bajtów:

Element Wartość bajtu
0 0x00
1 0x04

Wartości ujemne są zapisywane w tablicy przy użyciu reprezentacji uzupełniającej dwóch w najbardziej kompaktowej formie możliwej. Na przykład -1 jest reprezentowana jako pojedynczy bajt, którego wartość jest 0xFF zamiast tablicy z wieloma elementami, takimi jak 0xFF, 0xFF lub 0xFF, 0xFF, , 0xFF. 0xFF

Ponieważ reprezentacja uzupełniająca dwóch zawsze interpretuje bit o najwyższej kolejności ostatniego bajtu w tablicy (bajt w pozycji Array.Length- 1) jako bit znaku, metoda zwraca tablicę bajtów z dodatkowym elementem, którego wartość jest zerowa, aby uściślić dodatnie wartości, które w przeciwnym razie mogą być interpretowane jako ustawione bity znaku. Na przykład wartość 120 lub 0x78 jest reprezentowana jako tablica jedno bajtowa: 0x78. Jednak wartość 128 lub 0x80, jest reprezentowana jako tablica dwu bajtowa: 0x80, 0x00.

Wartość można zaokrąglić BigInteger , przechowując ją w tablicy bajtów, a następnie przywracając ją przy użyciu konstruktora BigInteger(Byte[]) .

Przestroga

Jeśli kod modyfikuje wartość poszczególnych bajtów w tablicy zwróconej przez tę metodę przed przywróceniem wartości, musisz upewnić się, że nie zmieniasz przypadkowo bitu znaku. Jeśli na przykład modyfikacje zwiększają wartość dodatnią, tak aby bit najwyższego porządku w ostatnim elemecie tablicy bajtów stał się ustawiony, możesz dodać nowy bajt, którego wartość jest równa zero na końcu tablicy.

Dotyczy

ToByteArray(Boolean, Boolean)

Źródło:
BigInteger.cs
Źródło:
BigInteger.cs
Źródło:
BigInteger.cs

Zwraca wartość tej BigInteger wartości jako tablicę bajtów przy użyciu najmniejszej możliwej liczby bajtów. Jeśli wartość ma wartość zero, zwraca tablicę jednego bajtu, którego element jest 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

true do używania kodowania bez znaku; w przeciwnym razie , false.

isBigEndian
Boolean

true w celu zapisania bajtów w kolejności bajtów big-endian; w przeciwnym razie , false.

Zwraca

Byte[]

Wartość bieżącego BigInteger obiektu przekonwertowanego na tablicę bajtów.

Wyjątki

Jeśli isUnsigned jest i Signtrue jest ujemny.

Uwagi

Wartość 33022 całkowitą można wyeksportować w czterech różnych tablicach:

Właściwości Wynik
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 }

Dotyczy