Code

private short ByteToInt16(byte[] _byte, bool _littleEndian = false) {
    if(_littleEndian) {
        return (short)(_byte[0] | _byte[1] << 8);
    } else {
        return (short)(_byte[1] | _byte[0] << 8);
    }
}
private ushort ByteToUInt16(byte[] _byte, bool _littleEndian = false) {
    if(_littleEndian) {
        return (ushort)(_byte[0] | _byte[1] << 8);
    } else {
        return (ushort)(_byte[1] | _byte[0] << 8);
    }
}
  • Little Endian
    • Byte 저장 순서에 관한 것으로 낮은 바이트를 낮은 주소에 넣는다.
      • 반대는 Big Endian
      • 엔디언(Endian)이라는 용어가 나오는데, 이건 조너선 스위프트의 작품인 《걸리버 여행기》에서 유래한 단어다. 작중 릴리퍼트라는 난쟁이들이 사는 나라에서 달걀을 먹을 때 뭉툭한 끝을 깨먹은 사람들과 뾰족한 끝을 깨먹는 사람들이 자기들이 옳다며 논쟁을 벌이는데, 여기서 뭉툭한 끝을 깨먹는 사람들을 큰 끝(big end)을 깨먹는다고 ian을 붙여 big endian이라고 부르고, 반대의 경우를 작은 끝(little end)을 깨먹는다고 little endian이라고 부른다.
  • | or 연산
  • << 왼쪽 시프트 연산

P.S. getInt24()의 경우

private int ByteToInt24(byte[] _byte, bool _littleEndian = false) {
    if(_littleEndian) {
        return (int)(_byte[0] | _byte[1] << 8 | _byte[2] << 16);
    } else {
        return (int)(_byte[2] | _byte[1] << 8 | _byte[0] << 16);
    }
}
private uint ByteToUInt24(byte[] _byte, bool _littleEndian = false) {
    if(_littleEndian) {
        return (uint)(_byte[0] | _byte[1] << 8 | _byte[2] << 16);
    } else {
        return (uint)(_byte[2] | _byte[1] << 8 | _byte[0] << 16);
    }
}

'C#' 카테고리의 다른 글

[VSCode: Error] Mac OS에서 FSharp Path 에러 생길 때  (0) 2023.05.09
미로 생성 알고리즘  (0) 2023.02.07
GetHashCode  (0) 2021.04.23
백준 1193 : 분수찾기  (0) 2021.02.03
백준 2292 : 벌집  (0) 2021.02.02
블로그 이미지

RIsN

,

사용 이유

  • JavaScript는 숫자 배열을 정렬(Sort)할 때 문자로 취급하므로, 제대로 순서가 잡히지 않는 현상이 일어날 수 있습니다.
    • 예) [3, 1, 2, 100, 4, 200].Sort()가 1, 100, 2, 200, 3, 4로 나올 수 있습니다.
  • 위와 같은 상황을 방지하기 위해서 배열.Sort() 내부에 커스텀 함수를 주어 순서를 정리하도록 합니다.

사용 예

예) 출처 : Data Structures & Algorithms with JavaScript

function compare(num1, num2) {
	return num1 - num2;
}
var nums = [3, 1, 2, 100, 4, 200];
nums.sort(compare);
print(nums); // 1, 2, 3, 4, 100, 200
  • return 값이 음수(-)일 때
    • 왼쪽 값을 좌측 순서로
    • 예) 왼쪽 숫자가 오른쪽 숫자보다 작다는 것
  • return 값이 동일할 때
    • 동일 순서
  • return 값이 양수(+)일 때
    • 오른쪽 값을 좌측 순서로
    • 예) 왼쪽 숫자가 오른쪽 숫자보다 크다는 것
블로그 이미지

RIsN

,

:: Study Recursion Function

::: How replay function self

function sum(arr, n) {
  // Only change code below this line
  // :: When n is 0 or minus, Don't Sum anything.
  // ::: also When you last Index
  if(n <= 0) {
    return 0;
  } else {
    // :: Remember first value and Call <Next : self(n - 1)>
    return arr[n - 1] + sum(arr, n - 1);
  }
  // Only change code above this line
}
블로그 이미지

RIsN

,