C# - binary 데이터 읽고, 쓰기

읽기

BitConverter

BitConverter 클래스의 타입 별 함수를 사용한다

var data = new byte[2048];
var pos = 0;

Int16 PacketID = BitConverter.ToInt16(data, pos);
pos += 2;

UnSafe

public static unsafe short Int16(byte[] bytes, int offset)
{
    fixed (byte* ptr = bytes)
    {
        return *(short*)(ptr + offset);
    }
}  

쓰기

List

public byte[] ToBytes()
{
    Int16 MsgLen = 100;
    Int32 TextLen = 324324;
    
    List<byte> dataSource = new List<byte>();
    dataSource.AddRange(BitConverter.GetBytes(MsgLen));
    dataSource.AddRange(BitConverter.GetBytes(TextLen));
    return dataSource.ToArray();
}

BinaryWriter

var ms = new System.IO.MemoryStream(sendData); 
using (var bw = new System.IO.BinaryWriter(ms))
{
    bw.Seek(3, System.IO.SeekOrigin.Begin); // 3바이트 이동
    bw.Write((UInt16)sendData.Length);
    bw.Write((UInt16)PACKET_ID.PACKET_ID_ROOM_CHAT_REQ);
}

UnSafe

public static unsafe int Int16(byte[] bytes, int offset, short value)
{
    fixed (byte* ptr = bytes)
    {
        *(short*)(ptr + offset) = value;
    }

    return 2;
}

이 글은 2019-09-14에 작성되었습니다.