BigEndianReader / Writer: Added ReadUInt24 / WriteUInt24 methods

This commit is contained in:
Tal Aloni 2017-06-17 13:41:06 +03:00
parent 366c4d61d1
commit fb7d6d4bc8
2 changed files with 36 additions and 0 deletions

View file

@ -18,6 +18,17 @@ namespace Utilities
return BigEndianConverter.ToUInt16(buffer, offset - 2); return BigEndianConverter.ToUInt16(buffer, offset - 2);
} }
public static uint ReadUInt24(byte[] buffer, int offset)
{
return (uint)((buffer[offset + 0] << 16) | (buffer[offset + 1] << 8) | (buffer[offset + 2] << 0));
}
public static uint ReadUInt24(byte[] buffer, ref int offset)
{
offset += 3;
return ReadUInt24(buffer, offset - 3);
}
public static int ReadInt32(byte[] buffer, ref int offset) public static int ReadInt32(byte[] buffer, ref int offset)
{ {
offset += 4; offset += 4;
@ -62,6 +73,13 @@ namespace Utilities
return BigEndianConverter.ToUInt16(buffer, 0); return BigEndianConverter.ToUInt16(buffer, 0);
} }
public static uint ReadUInt24(Stream stream)
{
byte[] buffer = new byte[4];
stream.Read(buffer, 1, 3);
return BigEndianConverter.ToUInt32(buffer, 0);
}
public static int ReadInt32(Stream stream) public static int ReadInt32(Stream stream)
{ {
byte[] buffer = new byte[4]; byte[] buffer = new byte[4];

View file

@ -30,6 +30,18 @@ namespace Utilities
offset += 2; offset += 2;
} }
public static void WriteUInt24(byte[] buffer, int offset, uint value)
{
byte[] bytes = BigEndianConverter.GetBytes(value);
Array.Copy(bytes, 1, buffer, offset, 3);
}
public static void WriteUInt24(byte[] buffer, ref int offset, uint value)
{
WriteUInt24(buffer, offset, value);
offset += 3;
}
public static void WriteInt32(byte[] buffer, int offset, int value) public static void WriteInt32(byte[] buffer, int offset, int value)
{ {
byte[] bytes = BigEndianConverter.GetBytes(value); byte[] bytes = BigEndianConverter.GetBytes(value);
@ -102,6 +114,12 @@ namespace Utilities
stream.Write(bytes, 0, bytes.Length); stream.Write(bytes, 0, bytes.Length);
} }
public static void WriteUInt24(Stream stream, uint value)
{
byte[] bytes = BigEndianConverter.GetBytes(value);
stream.Write(bytes, 1, 3);
}
public static void WriteInt32(Stream stream, int value) public static void WriteInt32(Stream stream, int value)
{ {
byte[] bytes = BigEndianConverter.GetBytes(value); byte[] bytes = BigEndianConverter.GetBytes(value);