提交 c8986266 编写于 作者: R Rich Felker

optimize ntohl etc. in terms of bswap functions

we can do this without violating the namespace now that they are
macros/inline functions rather than extern functions. the motivation
is that gcc was generating giant, slow, horrible code for the old
functions, and now generates a single byte-swapping instruction.
上级 c546be17
#include <netinet/in.h>
#include <byteswap.h>
uint32_t htonl(uint32_t n)
{
union {
uint8_t b[4];
uint32_t i;
} u = { { n>>24, n>>16, n>>8, n } };
return u.i;
union { int i; char c; } u = { 1 };
return u.c ? bswap_32(n) : n;
}
#include <netinet/in.h>
#include <byteswap.h>
uint16_t htons(uint16_t n)
{
union {
uint8_t b[2];
uint16_t s;
} u = { { n>>8, n } };
return u.s;
union { int i; char c; } u = { 1 };
return u.c ? bswap_16(n) : n;
}
#include <netinet/in.h>
#include <byteswap.h>
uint32_t ntohl(uint32_t n)
{
union {
uint32_t i;
uint8_t b[4];
} u = { n };
return (u.b[0]<<24) | (u.b[1]<<16) | (u.b[2]<<8) | u.b[3];
union { int i; char c; } u = { 1 };
return u.c ? bswap_32(n) : n;
}
#include <netinet/in.h>
#include <byteswap.h>
uint16_t ntohs(uint16_t n)
{
union {
uint16_t s;
uint8_t b[2];
} u = { n };
return (u.b[0]<<8) | u.b[1];
union { int i; char c; } u = { 1 };
return u.c ? bswap_16(n) : n;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册