endian(3) - wariua/manpages-ko GitHub Wiki
htobe16, htole16, be16toh, le16toh, htobe32, htole32, be32toh, le32toh, htobe64, htole64, be64toh, le64toh - νΈμ€νΈ λ°μ΄νΈ μμμ λΉ /리ν μλμΈ λ°μ΄νΈ μμ κ°μ κ° λ³ννκΈ°
#include <endian.h>
uint16_t htobe16(uint16_t host_16bits);
uint16_t htole16(uint16_t host_16bits);
uint16_t be16toh(uint16_t big_endian_16bits);
uint16_t le16toh(uint16_t little_endian_16bits);
uint32_t htobe32(uint32_t host_32bits);
uint32_t htole32(uint32_t host_32bits);
uint32_t be32toh(uint32_t big_endian_32bits);
uint32_t le32toh(uint32_t little_endian_32bits);
uint64_t htobe64(uint64_t host_64bits);
uint64_t htole64(uint64_t host_64bits);
uint64_t be64toh(uint64_t big_endian_64bits);
uint64_t le64toh(uint64_t little_endian_64bits);
glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
-
htobe16()
,htole16()
,be16toh()
,le16toh()
,htobe32()
,htole32()
,be32toh()
,le32toh()
,htobe64()
,htole64()
,be64toh()
,le64toh()
: -
- glibc 2.19λΆν°:
_DEFAULT_SOURCE
- glibc 2.19κΉμ§:
_BSD_SOURCE
μ΄ ν¨μλ€μ νμ¬ CPU("νΈμ€νΈ")μμ μ°λ λ°μ΄νΈ μμμ 리ν μλμΈ λ° λΉ μλμΈ λ°μ΄νΈ μμ μ¬μ΄μμ μ μ κ°μ λ°μ΄νΈ μΈμ½λ©μ λ³ννλ€.
ν¨μ μ΄λ¦μ μ«μ nnμ ν¨μμμ λ€λ£¨λ μ μμ ν¬κΈ°λ₯Ό λνλ΄λ©°, 16, 32, 64λΉνΈ μ€ νλμ΄λ€.
μ΄λ¦μ΄ "htobenn" ννμΈ ν¨μλ νΈμ€νΈ λ°μ΄νΈ μμμμ λΉ μλμΈ μμλ‘ λ³ννλ€.
μ΄λ¦μ΄ "htolenn" ννμΈ ν¨μλ νΈμ€νΈ λ°μ΄νΈ μμμμ 리ν μλμΈ μμλ‘ λ³ννλ€.
μ΄λ¦μ΄ "benntoh" ννμΈ ν¨μλ λΉ μλμΈ μμμμ νΈμ€νΈ λ°μ΄νΈ μμλ‘ λ³ννλ€.
μ΄λ¦μ΄ "lenntoh" ννμΈ ν¨μλ 리ν μλμΈ μμμμ νΈμ€νΈ λ°μ΄νΈ μμλ‘ λ³ννλ€.
glibc λ²μ 2.9μμ μ΄ ν¨μλ€μ΄ μΆκ°λμλ€.
μ΄ ν¨μλ€μ λΉνμ€μ΄λ€. λΉμ·ν ν¨μλ€μ΄ BSDλ€μ μ‘΄μ¬νλλ° κ±°κΈ°μ νμν ν€λ νμΌμ <endian.h>
κ° μλλΌ <sys/endian.h>
μ΄λ€. μνκΉκ²λ NetBSD, FreeBSD, glibcμμλ nn λΆλΆμ΄ νμ ν¨μ μ΄λ¦ λμ μ€λ OpenBSDμ μλ λͺ
λͺ
κ΄νμ λ°λ₯΄μ§ μλλ€. (κ·Έλμ μλ₯Ό λ€μ΄ OpenBSD "betoh32"μ λ±κ°λ¬Όμ΄ NetBSD, FreeBSD, glibcμμλ "be32toh"μ΄λ€.)
μ΄ ν¨μλ€μ λ μ€λλ byteorder(3) κ³μ΄ ν¨μλ€κ³Ό λΉμ·νλ€. μλ₯Ό λ€μ΄ be32toh()
λ ntohl()
κ³Ό κ°λ€.
byteorder(3) ν¨μλ€μ μ₯μ μ νμ€ ν¨μλΌμ λͺ¨λ μ λμ€ μμ€ν μμ μ¬μ© κ°λ₯νλ€λ μ μ΄λ€. νμ§λ§ TCP/IP λ§₯λ½μμ μ°λ €κ³ μ€κ³ν κ²μ΄κΈ° λλ¬Έμ μ΄ νμ΄μ§μ κΈ°μ λ 64λΉνΈ ννμ 리ν μλμΈ ννκ° λΉ μ Έ μλ€.
μλ νλ‘κ·Έλ¨μμλ μ μλ₯Ό νΈμ€νΈ λ°μ΄νΈ μμμμ 리ν μλμΈ λ° λΉ μλμΈ λ°μ΄νΈ μμλ‘ λ³νν κ²°κ³Όλ₯Ό λ³΄μ¬ μ€λ€. νΈμ€νΈ λ°μ΄νΈ μμκ° λ¦¬ν μλμΈ μλλ©΄ λΉ μλμΈμ΄λ―λ‘ λ³ν μ€ νμͺ½λ§ ν¨κ³Όκ° μκ² λλ€. μ΄ νλ‘κ·Έλ¨μ x86-32 κ°μ 리ν μλμΈ μμ€ν μμ λ리면 λ€μμ λ³΄κ² λλ€.
$ ./a.out
x.u32 = 0x44332211
htole32(x.u32) = 0x44332211
htobe32(x.u32) = 0x11223344
#include <endian.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
union {
uint32_t u32;
uint8_t arr[4];
} x;
x.arr[0] = 0x11; /* μ΅νμ μ£Όμ λ°μ΄νΈ */
x.arr[1] = 0x22;
x.arr[2] = 0x33;
x.arr[3] = 0x44; /* μ΅μμ μ£Όμ λ°μ΄νΈ */
printf("x.u32 = 0x%x\n", x.u32);
printf("htole32(x.u32) = 0x%x\n", htole32(x.u32));
printf("htobe32(x.u32) = 0x%x\n", htobe32(x.u32));
exit(EXIT_SUCCESS);
}
2019-03-06