📄 byteorder.h
字号:
/* DO NOT EDIT THIS FILE. It has been auto-edited by fixincludes from: "fixinc/tests/inc/sys/byteorder.h" This had to be done to correct non-standard usages in the original, manufacturer supplied header file. */#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#ifndef __BYTE_ORDER__/* Byte order defines. These are as defined on UnixWare 1.1, but with double underscores added at the front and back. */#define __LITTLE_ENDIAN__ 1234#define __BIG_ENDIAN__ 4321#define __PDP_ENDIAN__ 3412#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__)#ifndef __BYTE_ORDER__#define __BYTE_ORDER__ __LITTLE_ENDIAN__#endif/* Convert a host long to a network long. *//* We must use a new-style function definition, so that this will also be valid for C++. */static __inline__ unsigned longhtonl (unsigned long __arg){ register unsigned long __result; __asm__ ("xchg%B0 %b0,%h0 ; ror%L0 $16,%0 ; xchg%B0 %b0,%h0" : "=q" (__result) : "0" (__arg)); return __result;}/* Convert a host short to a network short. */static __inline__ unsigned shorthtons (unsigned int __arg){ register unsigned short __result; __asm__ ("xchg%B0 %b0,%h0" : "=q" (__result) : "0" (__arg)); return __result;}#elif ((defined (__i860__) && !defined (__i860_big_endian__)) \ || defined (__ns32k__) || defined (__vax__) \ || defined (__spur__) || defined (__arm__))#ifndef __BYTE_ORDER__#define __BYTE_ORDER__ __LITTLE_ENDIAN__#endif/* 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 (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 (unsigned int __arg){ register unsigned short __result; __result = (__arg << 8) & 0xff00; __result |= (__arg >> 8) & 0x00ff; return __result;}#else /* must be a big-endian machine */#ifndef __BYTE_ORDER__#define __BYTE_ORDER__ __BIG_ENDIAN__#endif/* Convert a host long to a network long. */static __inline__ unsigned longhtonl (unsigned long __arg){ return __arg;}/* Convert a host short to a network short. */static __inline__ unsigned shorthtons (unsigned int __arg){ return __arg;}#endif /* big-endian *//* Convert a network long to a host long. */static __inline__ unsigned longntohl (unsigned long __arg){ return htonl (__arg);}/* Convert a network short to a host short. */static __inline__ unsigned shortntohs (unsigned int __arg){ return htons (__arg);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -