BaseNエンコーディング
BaseNエンコーディングは、バイナリデータをテキストにエンコードするために使用されます。ここで、Nはエンコードに使用されるテキストアルファベットのサイズです。BaseNエンコーディングは、テキストプロトコル(HTTP、SMTP)または非デジタルチャネル(紙への印刷など)を介して送信するための「データの準備」に使用されます。
このエンコーディングの最も一般的なバリアントはBase64です。使用頻度を比較できるのは、16進数または単に16進数として知られるBase16のみです。それらを操作するためのツールは、最初のバージョンから.NETにありますが、あまり便利ではありません。
.NET Framework(コア)の内容
System.Security.Cryptography
ToBase64Transform / FromBase64Transform
Base64との間で変換するクラスがいくつかあります。CryptoStreamヘルパークラスを使用すると、ストリームのストリーミングに使用できます。
using System.Security.Cryptography;
var base64Transform = new ToBase64Transform();
var output = new MemoryStream();
var base64Encoder = new CryptoStream(output, base64Transform, CryptoStreamMode.Write);
base64Encoder.Write(new byte[] { 122 }, 0, 1);
base64Encoder.Close();
// output.ToArray() -> byte[4] { 101, 103, 61, 61 } aka "eg=="
System.Convert
ToBase64String / FromBase64String
バイトの配列をBase64文字列に変換したり元に戻したりするためのいくつかの関数。
using System;
var bytes = System.Convert.FromBase64String("eg==")
// bytes -> 122
System.BitConverter
Base16 (hexadecimal) , . : 0A-C0-D3
using System;
var hexString = BitConverter.ToString(new byte[] { 122, 122 });
// hexString -> "7A-7A"
System.Runtime.Remoting.Metadata.W3cXsd2001
SoapHexBinary (Framework-only)
Base16 (hexadecimal) .
using System.Runtime.Remoting.Metadata.W3cXsd2001;
var result = SoapHexBinary.Parse("A012");
// result.Value -> byte[];
System.Buffers.Text
Base64 (Core or System.Memory package)
Base64 . Span' Span .
Nuget
Multiformats.Base - Base2, 8, 16, 32, 58, 64 (+variants), MIT
BaseN . API . : .
SimpleBase - Base16, 32, 58, 85 (+variants), streaming, span, Apache-2
BaseN . .NET Core Span'. API, .
deniszykov.BaseN
, .NET Framework 4.5.
, Base64 Span<byte> to Span<byte> ( char[] <-> byte[] ). , . "" byte char , char 2 . .. , , .
/ :
byte[]
char[]
string
byte*
char*
Span<byte>
Span<char>
これはすべて、BaseNDecoder / BaseNEncoderの2つのクラスの中にあります。
次のエンコーディング辞書がサポートされています。
Base16(16進数/下部/上部)
Base32
ZBase32
Base64
Base64URLセーフ
using deniszykov.BaseN;
var bytes = Base64Convert.ToBytes("eg==");
// bytes[0] -> 122
より豊富なセットは、System.Text.Encodingを実装するBaseNEncodingクラスを提供します。
using deniszykov.BaseN;
var count = BaseNEncoding.Base64Url.GetByteCount("eg=="); // -> 1
var bytes = BaseNEncoding.Base64Url.GetBytes("eg=="); // -> 122
var baseNEncoder = new BaseNEncoder(BaseNAlphabet.Base64Alphabet);
var input = "eg==";
var output = new byte[1024];
baseNEncoder.Convert(input, 0, 4, output, 0, 1, true, out var charsUsed, out var bytesUsed, out var completed);
// output[0] -> 122
「簡単な」使用の他の例はここにあります。あなたはあなた自身の辞書を使うことができます。複雑な例はありません、それを必要とする人はテストでそれらを見つけることができます:)
Install-Package deniszykov.BaseN