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

,