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í
| 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
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
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 } |