BigInteger.ToByteArray Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
ToByteArray() |
Преобразует значение BigInteger в массив байтов. |
ToByteArray(Boolean, Boolean) |
Возвращает значение этого BigInteger в виде массива байтов, используя наименьшее количество байтов. Если значение равно нулю, возвращает массив из одного байта, элемент которого равен 0x00. |
ToByteArray()
- Исходный код:
- 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()
Возвращаемое значение
Значение текущего объекта 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 хранится в виде следующего массива из двух байтов:
Элемент | Байтовое значение |
---|---|
0 | 0x00 |
1 | 0x04 |
Отрицательные значения записываются в массив с использованием представления двух дополнений в наиболее компактной форме. Например, -1 представляется в виде одного байта, значение которого является 0xFF
вместо массива с несколькими элементами, такими как 0xFF
, 0xFF
или 0xFF
, 0xFF
, 0xFF
, . 0xFF
Поскольку представление дополнения two всегда интерпретирует бит верхнего порядка последнего байта в массиве (байт в позиции Array.Length- 1
) в качестве бита знака, метод возвращает массив байтов с дополнительным элементом, значение которого равно нулю, чтобы определить положительные значения, которые в противном случае можно было бы интерпретировать как заданные биты знака. Например, значение 120 или 0x78
представляется в виде однобайтового массива: 0x78
. Однако значение 128 или 0x80
представляется в виде двухбайтового массива: 0x80
, 0x00
.
Вы можете выполнить круговую передачу значения, BigInteger сохранив его в массиве байтов, а затем восстановив его с помощью конструктора BigInteger(Byte[]) .
Внимание!
Если код изменяет значение отдельных байтов в массиве, возвращаемом этим методом, перед восстановлением значения, необходимо убедиться, что бит знака не изменен непреднамеренно. Например, если изменения увеличивают положительное значение так, что устанавливается бит верхнего порядка в последнем элементе массива байтов, можно добавить новый байт, значение которого равно нулю, в конец массива.
Применяется к
ToByteArray(Boolean, Boolean)
- Исходный код:
- 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
.
Возвращаемое значение
Значение текущего объекта BigInteger, преобразованное в массив байтов.
Исключения
Если isUnsigned
имеет значение true
и Sign является отрицательным значением.
Комментарии
Целочисленное значение 33022
можно экспортировать в четыре разных массива:
Свойства | Результат |
---|---|
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 } |