⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 byteorder.h

📁 早期freebsd实现
💻 H
字号:
#ifndef _SYS_BYTEORDER_H#define _SYS_BYTEORDER_H/* Functions to convert `short' and `long' quantities from host byte order   to (internet) network byte order (i.e. big-endian).   Written by Ron Guilmette (rfg@ncd.com).   This isn't actually used by GCC.  It is installed by fixinc.svr4.   For big-endian machines these functions are essentially no-ops.   For little-endian machines, we define the functions using specialized   asm sequences in cases where doing so yields better code (e.g. i386).  */#if !defined (__GNUC__) && !defined (__GNUG__)#error You lose!  This file is only useful with GNU compilers.#endif#ifdef __GNUC__#define __STATIC static#else#define __STATIC#endif#ifdef __STDC____STATIC __inline__ unsigned long htonl (unsigned long);__STATIC __inline__ unsigned short htons (unsigned int);__STATIC __inline__ unsigned long ntohl (unsigned long);__STATIC __inline__ unsigned short ntohs (unsigned int);#endif /* defined (__STDC__) */#if defined (__i386__)/* Convert a host long to a network long.  */__STATIC __inline__ unsigned longhtonl (__arg)     unsigned long __arg;{  register unsigned long __result __asm__ ("%eax");  __result = __arg;  __asm__ ("xchgb	%%ah, %%al\n\	rorl	$16, %%eax\n\	xchgb	%%ah, %%al\n\	clc" : "=r" (__result) : "0" (__result));  return __result;}/* Convert a host short to a network short.  */__STATIC __inline__ unsigned shorthtons (__arg)     unsigned int __arg;{  register unsigned short __result __asm__ ("%eax");  __result = __arg;  __asm__ ("xchgb	%%ah, %%al\n\	clc" : "=r" (__result) : "0" (__result));  return __result;}#elif ((defined (__i860__) && !defined (__i860_big_endian__))	\       || defined (__ns32k__) || defined (__vax__)		\       || defined (__spur__) || defined (__arm__))/* For other little-endian machines, using C code is just as efficient as   using assembly code.  *//* Convert a host long to a network long.  */__STATIC __inline__ unsigned longhtonl (__arg)     unsigned long __arg;{  register unsigned long __result;  __result = (__arg >> 24) & 0x000000ff;  __result |= (__arg >> 8) & 0x0000ff00;  __result |= (__arg << 8) & 0x00ff0000;  __result |= (__arg << 24) & 0xff000000;  return __result;}/* Convert a host short to a network short.  */__STATIC __inline__ unsigned shorthtons (__arg)     unsigned int __arg;{  register unsigned short __result;  __result = (__arg << 8) & 0xff00;  __result |= (__arg >> 8) & 0x00ff;  return __result;}#else /* must be a big-endian machine *//* Convert a host long to a network long.  */__STATIC __inline__ unsigned longhtonl (__arg)     unsigned long __arg;{  return __arg;}/* Convert a host short to a network short.  */__STATIC __inline__ unsigned shorthtons (__arg)     unsigned int __arg;{  return __arg;}#endif /* big-endian *//* Convert a network long to a host long.  */__STATIC __inline__ unsigned longntohl (__arg)     unsigned long __arg;{  return htonl (__arg);}/* Convert a network short to a host short.  */__STATIC __inline__ unsigned shortntohs (__arg)     unsigned int __arg;{  return htons (__arg);}#undef __STATIC#endif /* !defined (_SYS_BYTEORDER_H) */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -