Conversion Functions
Version 2.1.10 introduced the availability of a few new
conversion functions, declared in
<asm/byteorder.h>. The functions can be used to
access multi-byte values when the value is known to be stored as
either little-endian or big-endian. Since the functions sometimes make
a good shortcut in writing driver code, the header
sysdep-2.1.h takes care of defining them for earlier
kernel versions.
The native implementation offered by 2.1 kernel sources is faster than the portable one offered by sysdep-2.1.h, because it can exploit architecture-dependent functionalities.
The new functions respond to the following prototypes, where
le stands for little-endian, and be stands
for big-endian. Note that strict data typing is not enforced by
the compiler, as most of the functions are preprocessor macros anyway;
the types shown below are there for your reference.
__u16 cpu_to_le16(__u16 cpu_val); __u32 cpu_to_le32(__u32 cpu_val); __u16 cpu_to_be16(__u16 cpu_val); __u32 cpu_to_be16(__u32 cpu_val); __u16 le16_to_cpu(__u16 le_val); __u32 le32_to_cpu(__u32 le_val); __u16 be16_to_cpu(__u16 be_val); __u32 be32_to_cpu(__u32 be_val);
Given the usefulness of such functions when dealing with binary data streams (such as filesystem data or information stored on an interface board), version 2.1.43 added two new sets of conversion functions. These sets allow you to retrieve a value by pointer, or to convert in place the value pointed to by the argument. The functions for 16-bit little-endian ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access