BigInteger.ToByteArray 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
오버로드
ToByteArray() |
BigInteger 값을 바이트 배열로 변환합니다. |
ToByteArray(Boolean, Boolean) |
가능한 최소 바이트 수를 사용하여 이 BigInteger의 값을 바이트 배열로 반환합니다. 값이 0이면 해당 요소가0x00인 1바이트 배열을 반환합니다. |
ToByteArray()
- Source:
- BigInteger.cs
- Source:
- BigInteger.cs
- Source:
- 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
설명
이 메서드에서 반환된 배열의 개별 바이트는 little-endian 순서로 표시됩니다. 즉, 값의 하위 바이트가 더 높은 순서 바이트보다 우선합니다. 배열의 첫 번째 바이트는 값의 BigInteger 처음 8비트를 반영하고, 두 번째 바이트는 다음 8비트를 반영합니다. 예를 들어 1024 또는 0x0400 값은 다음 두 바이트 배열로 저장됩니다.
요소 | 바이트 값 |
---|---|
0 | 0x00 |
1 | 0x04 |
음수 값은 가능한 가장 컴팩트한 형태로 두 개의 보수 표현을 사용하여 배열에 기록됩니다. 예를 들어 -1은 값 0xFF
이 , 또는 0xFF
, 0xFF
0xFF
, 0xFF
0xFF
, 와 같은 여러 요소가 있는 배열이 아닌 단일 바이트로 0xFF
표시됩니다.
두 개의 보수 표현은 항상 배열의 마지막 바이트(위치 Array.Length- 1
바이트)의 가장 높은 순서 비트를 부호 비트로 해석하므로 메서드는 부호 비트가 설정된 것으로 해석될 수 있는 양수 값을 구분하기 위해 값이 0인 추가 요소가 있는 바이트 배열을 반환합니다. 예를 들어 값 120 또는 0x78
는 단일 바이트 배열 0x78
로 표시됩니다. 그러나 128 또는 0x80
는 2 바이트 배열0x80
로 표시됩니다. , . 0x00
바이트 배열에 BigInteger 저장한 다음 생성자를 사용하여 BigInteger(Byte[]) 복원하여 값을 왕복할 수 있습니다.
주의
코드가 값을 복원하기 전에 이 메서드가 반환한 배열에서 개별 바이트 값을 수정하는 경우 부호 비트를 의도치 않게 변경하지 않도록 해야 합니다. 예를 들어 바이트 배열의 마지막 요소에서 가장 높은 순서의 비트가 설정되도록 수정하면 값이 0인 새 바이트를 배열 끝에 추가할 수 있습니다.
적용 대상
ToByteArray(Boolean, Boolean)
- Source:
- BigInteger.cs
- Source:
- BigInteger.cs
- Source:
- BigInteger.cs
가능한 최소 바이트 수를 사용하여 이 BigInteger의 값을 바이트 배열로 반환합니다. 값이 0이면 해당 요소가0x00인 1바이트 배열을 반환합니다.
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
Big endian 바이트 순서로 바이트를 쓰려면 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 } |
적용 대상
.NET