BigInteger.ToByteArray Метод

Определение

Перегрузки

Имя Описание
ToByteArray(Boolean, Boolean)

Возвращает значение этого BigInteger массива байтов, используя наименьшее количество байтов. Если значение равно нулю, возвращает массив одного байта, элемент которого 0x00.

ToByteArray()

Преобразует значение в BigInteger массив байтов.

ToByteArray(Boolean, Boolean)

Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs

Возвращает значение этого BigInteger массива байтов, используя наименьшее количество байтов. Если значение равно нулю, возвращает массив одного байта, элемент которого 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()

Параметры

isUnsigned
Boolean

true для использования кодировки без знака; falseв противном случае .

isBigEndian
Boolean

true для записи байтов в порядке байтов больших байтов; falseв противном случае .

Возвращаемое значение

Byte[]

Значение текущего BigInteger объекта, преобразованного в массив байтов.

Исключения

Если isUnsigned и true является Sign отрицательным.

Комментарии

Целочисленное значение 33022 можно экспортировать в четырех разных массивах:

Properties Результат
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 }

Применяется к

ToByteArray()

Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs
Исходный код:
BigInteger.cs

Преобразует значение в BigInteger массив байтов.

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

Возвращаемое значение

Byte[]

Значение текущего BigInteger объекта, преобразованного в массив байтов.

Примеры

В следующем примере показано, как некоторые BigInteger значения представлены в массивах байтов.

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

Комментарии

Отдельные байты в массиве, возвращаемом этим методом, отображаются в небольшом порядке. То есть байты нижнего порядка значения предшествуют байтам более высокого порядка. Первый байт массива отражает первые восемь битов BigInteger значения, второй байт отражает следующие восемь битов и т. д. Например, значение 1024 или 0x0400 хранится в следующем массиве двух байтов:

Элемент Тип Byte (байтовое значение)
0 0x00
1 0x04

Отрицательные значения записываются в массив с помощью двух дополнительных представлений в самой компактной форме. Например, -1 представлен как один байт, значение 0xFF которого вместо массива с несколькими элементами, такими как 0xFF0xFF, или 0xFF0xFF, . 0xFF0xFF

Поскольку представление двух дополнений всегда интерпретирует бит последнего байта последнего байта в массиве ( Array.Length- 1положение байта) в качестве бита знака, метод возвращает массив байтов с дополнительным элементом, значение которого равно нулю, чтобы диамбигуировать положительные значения, которые в противном случае могут быть интерпретированы как имеющие биты знака. Например, значение 120 или 0x78 представляется в виде однобайтового массива: 0x78 Однако 128 или 0x80, представляется в виде двухбайтового массива: 0x80, 0x00.

Можно обойти BigInteger значение, сохраняя его в массиве байтов, а затем восстанавливая его с помощью конструктора BigInteger(Byte[]) .

Предостережение

Если код изменяет значение отдельных байтов в массиве, возвращаемом этим методом, прежде чем восстановить значение, необходимо убедиться, что непреднамеренно изменить бит знака. Например, если изменения увеличивают положительное значение, чтобы бит верхнего порядка в последнем элементе массива байтов был задан, можно добавить новый байт, значение которого равно нулю к концу массива.

Применяется к