Byte 순서 (Big-endian & Little-endian)

Big-endian은 값을 앞에서부터 기록하고, Little-endian은 값을 뒤에서부터 기록한다고 알고있자. 예를들어, 0x12345678을 binary로 기록한다고 하면, 각각은 다음과 같이 기록된다.

  • Big-endian: 12 34 56 78
  • Little-endian: 78 56 34 12

C++에서 ‘#include <arpa/inet.h>’를 이용해 include 해 주면, Byte 순서를 바꿔주는 네가지 함수를 사용할 수 있다.

  • uint16_t ntohs(uint16_t)
  • uint32_t ntohl(uint32_t)
  • uint16_t htons(uint16_t)
  • uint32_t htonl(uint32_t)

각각 uint16_t 또는 uint32_t형 변수를 받아서, uint16_t 또는 uint32_t형 변수를 반환한다. 입력 된 변수의 주소값 Byte 순서를 바꿔서 반환하므로, 반환되는 값은 전혀 다른값이 돼 있다. 물론 값을 쓰려고 이런일을 하는건 아닐테니 그냥 참고사항으로 적어둔다.

위 함수들은 XtoY(s,l) 형태로 이해하면 되는데, X에서의 Byte순서의 (short, long) 변수를 Y에서의 Byte순서로 바꿔서 반환하라는 의미이다. 만약 X에서의 Byte순서와 Y에서의 Byte순서가 같다면 입력값이 그대로 반환된다.

참고로 uint16_t 와 uint32_t에서 u는 unsigned를 의하고, 16과 32는 각각 비트수를 의미, _t는 typedef를 이용해서 정의된 변수형이라는 의미이다. 따라서 uint16_t는 unsigned형 int이기 때문에 음수는 사용할 수 없고, 16비트이므로 2바이트의 크기를 가지는 변수형이라는걸 알 수 있다.

Symbolic link 사용시 주의사항!

예를들어 /home/geniejhang/test 라는 폴더를 symbolic link로 /home/geniejhang/test_sym 이라고 만들었다고 해보자.

이 상태에서 rm -rf /home/geniejhang/t 까지 치고 tab을 누르면 /home/geniejhang/test 까지 완성되고, _를 친 다음 다시 tab을 누르면 /home/geniejhang/test_sym/ 까지 완성된다!

여기서 주의 할 곳은 /home/geniejhang/test_sym여기서의 마지막 슬래시! 이놈이 있을 때, rm -rf 를 해버리면 폴더 안에 있는 내용이 다 날아간다ㅠ

Symbolic link를 지울땐 rm으로 하자ㅠㅠ