|
|
|
namespace MiscUtil.Conversion
|
|
{
|
|
/// <summary>
|
|
/// Implementation of EndianBitConverter which converts to/from big-endian
|
|
/// byte arrays.
|
|
/// </summary>
|
|
public sealed class BigEndianBitConverter : EndianBitConverter
|
|
{
|
|
/// <summary>
|
|
/// Indicates the byte order ("endianess") in which data is converted using this class.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Different computer architectures store data using different byte orders. "Big-endian"
|
|
/// means the most significant byte is on the left end of a word. "Little-endian" means the
|
|
/// most significant byte is on the right end of a word.
|
|
/// </remarks>
|
|
/// <returns>true if this converter is little-endian, false otherwise.</returns>
|
|
public sealed override bool IsLittleEndian()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Indicates the byte order ("endianess") in which data is converted using this class.
|
|
/// </summary>
|
|
public sealed override Endianness Endianness
|
|
{
|
|
get { return Endianness.BigEndian; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Copies the specified number of bytes from value to buffer, starting at index.
|
|
/// </summary>
|
|
/// <param name="value">The value to copy</param>
|
|
/// <param name="bytes">The number of bytes to copy</param>
|
|
/// <param name="buffer">The buffer to copy the bytes into</param>
|
|
/// <param name="index">The index to start at</param>
|
|
protected override void CopyBytesImpl(long value, int bytes, byte[] buffer, int index)
|
|
{
|
|
int endOffset = index+bytes-1;
|
|
for (int i=0; i < bytes; i++)
|
|
{
|
|
buffer[endOffset-i] = unchecked((byte)(value&0xff));
|
|
value = value >> 8;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns a value built from the specified number of bytes from the given buffer,
|
|
/// starting at index.
|
|
/// </summary>
|
|
/// <param name="buffer">The data in byte array format</param>
|
|
/// <param name="startIndex">The first index to use</param>
|
|
/// <param name="bytesToConvert">The number of bytes to use</param>
|
|
/// <returns>The value built from the given bytes</returns>
|
|
protected override long FromBytes(byte[] buffer, int startIndex, int bytesToConvert)
|
|
{
|
|
long ret = 0;
|
|
for (int i=0; i < bytesToConvert; i++)
|
|
{
|
|
ret = unchecked((ret << 8) | buffer[startIndex+i]);
|
|
}
|
|
return ret;
|
|
}
|
|
}
|
|
}
|