반응형
C#에서 포인터를 사용하여 ulong타입의 값을 바이트 배열에 변환하여 저장하는 것으로 예시
ToBytes
static unsafe void ToBytes(byte[] array, int offset, ulong value)
매개변수
array : 변환할 데이터를 저장하는 바이트 배열이다.
offset : array 배열에서 데이터 저장할 시작 위치를 나타내는 오프셋이다.
value : 바이트 배열로 변환할 ulong데이터이다.
static unsafe void ToBytes(byte[] array, int offset, ulong value)
{
fixed (byte* ptr = &array[offset])
*(ulong*)ptr = value;
}
01 ptr - araay[offset]을 가리키는 포인터
fixed (byte* ptr = &array[offset])
02 array[offset]에 ulong형식의 value값을 저장
ptr을ulong*타입으로 캐스팅하여 사용하면 ptr이 가리키는 메모리 주소로부터 8byte를 읽어 ulong으로 해석한 값이 저장된다.
어떻게 8byte를 읽어올까?
byte*타입의 포인터는 1바이트씩 데이터를 읽어오므로 이는 메모리 주소로부터 1바이트씩 데이터를 읽어온다. ulong*타입의 포인터는 8바이트씩 데이터를 읽어므로 이는 메모리 주소로부터 8바이트씩 데이터를 읽어온다. 그러므로 포인터 캐스팅 기능을 통해 메모리 주소로부터 8바이트 데이터를 읽어 올 수 있다.
*(ulong*)ptr = value;
offset이 2라고 가정
반응형
'유니티 공부 > C# 문법' 카테고리의 다른 글
C# - LinkedList 개념, 프로퍼티, 메서드 설명 (0) | 2023.09.20 |
---|---|
C# - Xml 및 System.Xml 클래스들 (0) | 2023.08.19 |
C# - TryWriteBytes (0) | 2023.08.03 |
C# - ArraySegment<T> Struct (0) | 2023.07.19 |
C# 문법 - Tuple<T1,T2> (0) | 2023.06.14 |
댓글