BigInteger.ToByteArray Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
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 0xFF
0xFF
, , . 0xFF
0xFF
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
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 } |