大端序和小端序的程序

program on Big endian and little endian

本文关键字:程序      更新时间:2023-10-16

我正在阅读有关小端序-大端序的文章,并遇到了这些概念

   long long number 
(((number & 0x00000000000000ff) << 56) + 
 ((number & 0x000000000000ff00) << 40) + 
 ((number & 0x0000000000ff0000) << 24) +
 ((number & 0x00000000ff000000) << 8) + 
 ((number & 0x000000ff00000000) >> 8) + 
 ((number & 0x0000ff0000000000) >> 24) +
 ((number & 0x00ff000000000000) >> 40) +
 ((number & 0xff00000000000000) >> 56 ))

它基本上是做什么的?

当我使用( gcc -lrt -lm program_name) 编译它时,我收到一条警告说

   integer constant is too large for ‘long’ type

该代码对无符号的 64 位数据类型执行小端序和大端序之间的切换。

请看第一个子表达式:

(number & 0x00000000000000ff) << 56

这会屏蔽 0-7 位,并将它们向左移动 56。所以他们现在占据了 56-63 位。

下一个子表达式:

(number & 0x000000000000ff00) << 40

这会屏蔽掉位 8-15,并将它们向左移动 40。等等,等等。

如果是编写代码,我会使用按位或,|,而不是算术加法,+,因为在我看来读起来更好。