BigInteger.ToByteArray Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Přetížení
ToByteArray() |
BigInteger Převede hodnotu na bajtové pole. |
ToByteArray(Boolean, Boolean) |
Vrátí hodnotu tohoto BigInteger pole jako pole bajtů s nejmenším možným počtem bajtů. Pokud je hodnota nula, vrátí pole o jednom bajtu, jehož prvek je 0x00. |
ToByteArray()
- Zdroj:
- BigInteger.cs
- Zdroj:
- BigInteger.cs
- Zdroj:
- BigInteger.cs
BigInteger Převede hodnotu na bajtové pole.
public:
cli::array <System::Byte> ^ ToByteArray();
public byte[] ToByteArray ();
member this.ToByteArray : unit -> byte[]
Public Function ToByteArray () As Byte()
Návraty
Hodnota aktuálního BigInteger objektu převedeného 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 zobrazí v pořadí little-endian. To znamená, že bajty nižšího řádu hodnoty předchází bajtům vyššího pořadí. První bajt pole odráží prvních osm bitů BigInteger hodnoty, druhý bajt dalších osm bitů atd. Například hodnota 1024 nebo 0x0400 je uložena jako následující pole se dvěma bajty:
Prvek | Hodnota bajtů |
---|---|
0 | 0x00 |
1 | 0x04 |
Záporné hodnoty se zapisují do pole pomocí reprezentace dvojky v nejkompaktnější možné podobě. Například hodnota -1 je reprezentována jako jeden bajt, jehož hodnota je 0xFF
místo pole s více prvky, jako 0xFF
jsou , 0xFF
nebo 0xFF
, 0xFF
, 0xFF
, . 0xFF
Vzhledem k tomu, že reprezentace doplňku two vždy interpretuje bit nejvyššího pořadí posledního bajtu v matici (bajt na pozici Array.Length- 1
) jako bit znaménka, vrátí metoda pole bajtů s dodatečným prvkem, jehož hodnota je nula, k nejednoznačnosti kladných hodnot, které by jinak mohly být interpretovány jako jejich bity znaménka nastavené. Například hodnota 120 nebo 0x78
je reprezentována jako jedno bajtové pole: 0x78
. Číslo 128 nebo 0x80
je však reprezentováno jako dvou bajtové pole: 0x80
, 0x00
.
Hodnotu můžete vrátit zpět BigInteger tak, že ji uložíte do pole bajtů a pak ji obnovíte pomocí konstruktoru BigInteger(Byte[]) .
Upozornění
Pokud váš kód změní hodnotu jednotlivých bajtů v poli vrácené touto metodou před obnovením hodnoty, musíte zajistit, aby nedošlo k neúmyslné změně bitu znaménka. Pokud například vaše úpravy zvýší kladnou hodnotu tak, že bit nejvyššího pořadí v posledním prvku pole bajtů se stane set, můžete na konec pole přidat nový bajt, jehož hodnota je nula.
Platí pro
ToByteArray(Boolean, Boolean)
- Zdroj:
- BigInteger.cs
- Zdroj:
- BigInteger.cs
- Zdroj:
- BigInteger.cs
Vrátí hodnotu tohoto BigInteger pole jako pole bajtů s nejmenším možným počtem bajtů. Pokud je hodnota nula, vrátí pole o jednom 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
true
používat kódování bez znaménka; v opačném případě . false
- isBigEndian
- Boolean
true
psát bajty v pořadí bajtů big-endian; v opačném případě . false
Návraty
Hodnota aktuálního BigInteger objektu převedeného na pole bajtů.
Výjimky
Pokud isUnsigned
je true
a Sign je negativní.
Poznámky
Celočíselná hodnota 33022
se dá exportovat do čtyř různých polí:
Vlastnosti | 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 } |