Udostępnij za pośrednictwem


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ść jest równa 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
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

Uwagi

Poszczególne bajty w tablicy zwróconej przez tę metodę są wyświetlane w kolejności małej liczby bajtów. Oznacza to, że bajty niższej kolejności wartości poprzedzają bajty wyższego rzędu. 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. Na przykład parametr -1 jest reprezentowany jako pojedynczy bajt, którego wartość jest 0xFF zamiast tablicy z wieloma elementami, takimi jak 0xFF, 0xFF lub 0xFF0xFF, , . 0xFF0xFF

Ponieważ reprezentacja dopeł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 zero, aby uściślić wartości dodatnie, które w przeciwnym razie można interpretować jako zestaw bitów 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ść pojedynczych 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 rzędu w ostatnim elemecie tablicy bajtów stał się ustawiony, można 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ść jest równa 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 aby zapisać bajty 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 wartość jest true ujemna i Sign jest ujemna.

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