Hex
Class to decode and encode Hex.
using System;
using System.IO;
namespace Org.BouncyCastle.Utilities.Encoders
{
public sealed class Hex
{
private static readonly HexEncoder encoder = new HexEncoder();
private Hex()
{
}
public static string ToHexString(byte[] data)
{
return ToHexString(data, false);
}
public static string ToHexString(byte[] data, bool upperCase)
{
return ToHexString(data, 0, data.Length, upperCase);
}
public static string ToHexString(byte[] data, int off, int length)
{
return ToHexString(data, off, length, false);
}
public static string ToHexString(byte[] data, int off, int length, bool upperCase)
{
return ToHexString(data.AsMemory(off, length), upperCase);
}
public static string ToHexString(ReadOnlyMemory<byte> data, bool upperCase = false)
{
if (data.Length == 0)
return string.Empty;
if (data.Length > 1073741823)
throw new ArgumentOutOfRangeException("data");
if (upperCase)
return string.Create(data.Length * 2, data, delegate(Span<char> chars, ReadOnlyMemory<byte> data) {
HexEncoder.EncodeUpper(data.Span, chars);
});
return string.Create(data.Length * 2, data, delegate(Span<char> chars, ReadOnlyMemory<byte> data) {
HexEncoder.EncodeLower(data.Span, chars);
});
}
public static byte[] Encode(byte[] data)
{
return Encode(data, 0, data.Length);
}
public static byte[] Encode(byte[] data, int off, int length)
{
MemoryStream memoryStream = new MemoryStream(length * 2);
encoder.Encode(data, off, length, memoryStream);
return memoryStream.ToArray();
}
public static int Encode(byte[] data, Stream outStream)
{
return encoder.Encode(data, 0, data.Length, outStream);
}
public static int Encode(byte[] data, int off, int length, Stream outStream)
{
return encoder.Encode(data, off, length, outStream);
}
public static byte[] Decode(byte[] data)
{
MemoryStream memoryStream = new MemoryStream((data.Length + 1) / 2);
encoder.Decode(data, 0, data.Length, memoryStream);
return memoryStream.ToArray();
}
public static byte[] Decode(string data)
{
MemoryStream memoryStream = new MemoryStream((data.Length + 1) / 2);
encoder.DecodeString(data, memoryStream);
return memoryStream.ToArray();
}
public static int Decode(string data, Stream outStream)
{
return encoder.DecodeString(data, outStream);
}
public static byte[] DecodeStrict(string str)
{
return encoder.DecodeStrict(str, 0, str.Length);
}
public static byte[] DecodeStrict(string str, int off, int len)
{
return encoder.DecodeStrict(str, off, len);
}
}
}