BigInteger.ToByteArray Metod

Definition

Överlagringar

Name Description
ToByteArray()

Konverterar ett BigInteger värde till en bytematris.

ToByteArray(Boolean, Boolean)

Returnerar värdet för detta BigInteger som en bytematris med minsta möjliga antal byte. Om värdet är noll returnerar en matris med en byte vars element är 0x00.

ToByteArray()

Källa:
BigInteger.cs
Källa:
BigInteger.cs
Källa:
BigInteger.cs
Källa:
BigInteger.cs
Källa:
BigInteger.cs

Konverterar ett BigInteger värde till en bytematris.

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

Returer

Byte[]

Värdet för det aktuella BigInteger objektet som konverterats till en matris med byte.

Exempel

I följande exempel visas hur vissa BigInteger värden representeras i bytematriser.

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

Kommentarer

De enskilda byteen i matrisen som returneras med den här metoden visas i lite endiansk ordning. Det vill:s lägre orderbyte för värdet föregår byte med högre ordning. Den första byte av matrisen återspeglar de första åtta bitarna av BigInteger värdet, den andra byte återspeglar de kommande åtta bitarna och så vidare. Till exempel lagras värdet 1024, eller 0x0400, som följande matris med två byte:

Element Bytevärde
0 0x00
1 0x04

Negativa värden skrivs till matrisen med hjälp av tvås komplementrepresentation i så kompakt form som möjligt. Till exempel representeras -1 som en enda byte vars värde är 0xFF i stället för som en matris med flera element, till 0xFFexempel , 0xFF eller 0xFF, 0xFF, 0xFF, 0xFF.

Eftersom tvås komplementrepresentation alltid tolkar den högsta biten av den sista byteen i matrisen (byte vid position Array.Length- 1) som teckenbiten, returnerar metoden en bytematris med ett extra element vars värde är noll för att skilja positiva värden som annars skulle kunna tolkas som att deras teckenbitar har angetts. Till exempel visas värdet 120 eller 0x78 som en matris med en enda byte: 0x78. Men 128, eller 0x80, representeras som en matris med två byte: 0x80, 0x00.

Du kan avrunda ett BigInteger värde genom att lagra det i en bytematris och sedan återställa det med konstruktorn BigInteger(Byte[]) .

Caution

Om koden ändrar värdet för enskilda byte i matrisen som returneras av den här metoden innan värdet återställs, måste du se till att du inte oavsiktligt ändrar teckenbiten. Om dina ändringar till exempel ökar ett positivt värde så att den högsta biten i det sista elementet i bytematrisen anges kan du lägga till en ny byte vars värde är noll i slutet av matrisen.

Gäller för

ToByteArray(Boolean, Boolean)

Källa:
BigInteger.cs
Källa:
BigInteger.cs
Källa:
BigInteger.cs
Källa:
BigInteger.cs
Källa:
BigInteger.cs

Returnerar värdet för detta BigInteger som en bytematris med minsta möjliga antal byte. Om värdet är noll returnerar en matris med en byte vars element är 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()

Parametrar

isUnsigned
Boolean

trueför att använda osignerad kodning; annars . false

isBigEndian
Boolean

trueatt skriva byte i en stor-endian byte ordning; annars . false

Returer

Byte[]

Värdet för det aktuella BigInteger objektet som konverterats till en matris med byte.

Undantag

Om isUnsigned är true och Sign är negativt.

Kommentarer

Heltalsvärdet 33022 kan exporteras i fyra olika matriser:

Egenskaper Result
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 }

Gäller för