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);
}
}