BigInteger.ToByteArray Метод

Определение

Перегрузки

ToByteArray()

Преобразует значение BigInteger в массив байтов.Converts a BigInteger value to a byte array.

ToByteArray(Boolean, Boolean)

Возвращает значение этого BigInteger в виде массива байтов, используя наименьшее количество байтов.Returns the value of this BigInteger as a byte array using the fewest number of bytes possible. Если значение равно нулю, возвращает массив из одного байта, элемент которого равен 0x00.If the value is zero, returns an array of one byte whose element is 0x00.

ToByteArray()

Преобразует значение BigInteger в массив байтов.Converts a BigInteger value to a byte array.

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

Возвраты

Byte[]

Значение текущего объекта BigInteger, преобразованное в массив байтов.The value of the current BigInteger object converted to an array of bytes.

Примеры

В следующем примере показано, как некоторые значения BigInteger представлены в массивах байтов.The following example illustrates how some BigInteger values are represented in byte arrays.

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

Комментарии

Отдельные байты в массиве, возвращаемые этим методом, отображаются в порядке с прямым порядком байтов.The individual bytes in the array returned by this method appear in little-endian order. То есть байты более низкого порядка в значении предшествуют байтам более высокого порядка.That is, the lower-order bytes of the value precede the higher-order bytes. Первый байт массива отражает первые восемь бит BigIntegerого значения, второй байт отражает следующие восемь бит и т. д.The first byte of the array reflects the first eight bits of the BigInteger value, the second byte reflects the next eight bits, and so on. Например, значение 1024 или 0x0400 хранится как следующий массив из двух байтов:For example, the value 1024, or 0x0400, is stored as the following array of two bytes:

ЭлементElement Значение ByteByte value
00 0x000x00
11 0x040x04

Отрицательные значения записываются в массив с помощью представления дополнения для двух вариантов в самой компактной форме.Negative values are written to the array using two's complement representation in the most compact form possible. Например,-1 представляется в виде одного байта, значение которого 0xFF, а не в виде массива с несколькими элементами, например 0xFF, 0xFF или 0xFF, 0xFF, 0xFF, 0xFF.For example, -1 is represented as a single byte whose value is 0xFF instead of as an array with multiple elements, such as 0xFF, 0xFF or 0xFF, 0xFF, 0xFF, 0xFF.

Поскольку представление дополнения двух элементов всегда интерпретирует бит последнего байта в массиве (байт в позиции Array.Length- 1) в качестве бита знака, метод возвращает массив байтов с дополнительным элементом, значение которого равно нулю для устранения неоднозначности. положительные значения, которые в противном случае могут быть интерпретированы как имеющие свои биты знаков.Because two's complement representation always interprets the highest-order bit of the last byte in the array (the byte at position Array.Length- 1) as the sign bit, the method returns a byte array with an extra element whose value is zero to disambiguate positive values that could otherwise be interpreted as having their sign bits set. Например, значение 120 или 0x78 представлено в виде однобайтового массива: 0x78.For example, the value 120 or 0x78 is represented as a single-byte array: 0x78. Однако 128 или 0x80представляется в виде массива из двух байтов: 0x80, 0x00.However, 128, or 0x80, is represented as a two-byte array: 0x80, 0x00.

Можно выполнить циклический обмен BigInteger значением, сохранив его в массиве байтов и затем восстановив его с помощью конструктора BigInteger(Byte[]).You can round-trip a BigInteger value by storing it to a byte array and then restoring it using the BigInteger(Byte[]) constructor.

Внимание!

Если код изменяет значение отдельных байтов в массиве, возвращаемом этим методом, перед восстановлением значения, необходимо убедиться, что вы не случайно изменили бит знака.If your code modifies the value of individual bytes in the array returned by this method before it restores the value, you must make sure that you do not unintentionally change the sign bit. Например, если изменения увеличивают положительное значение таким образом, что бит наивысшего порядка в последнем элементе массива байтов становится установленным, можно добавить новый байт, значение которого равно нулю, в конец массива.For example, if your modifications increase a positive value so that the highest-order bit in the last element of the byte array becomes set, you can add a new byte whose value is zero to the end of the array.

ToByteArray(Boolean, Boolean)

Возвращает значение этого BigInteger в виде массива байтов, используя наименьшее количество байтов.Returns the value of this BigInteger as a byte array using the fewest number of bytes possible. Если значение равно нулю, возвращает массив из одного байта, элемент которого равен 0x00.If the value is zero, returns an array of one byte whose element is 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.true to use unsigned encoding; otherwise, false.

isBigEndian
Boolean

true для записи байтов в обратном порядке; в противном случае — false.true to write the bytes in a big-endian byte order; otherwise, false.

Возвраты

Byte[]

Значение текущего объекта BigInteger, преобразованное в массив байтов.The value of the current BigInteger object converted to an array of bytes.

Исключения

Если isUnsigned имеет значение true и Sign является отрицательным значением.If isUnsigned is true and Sign is negative.

Комментарии

Целочисленное значение 33022 можно экспортировать в четыре разных массива:The integer value 33022 can be exported in four different arrays:

СвойстваProperties Результат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 }

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