Ale*_*der 4 c binary integer bit-manipulation endianness
为了满足特定的需要,我在四个一个字节的字符中构建一个四字节整数,没有什么特别的(在我的小端平台上):
return (( v1 << 24) | (v2 << 16) | (v3 << 8) | v4);
Run Code Online (Sandbox Code Playgroud)
我知道,存储在大端机器整数会是什么样子AB BC CD DE,而不是DE CD BC AB小字节序的,但会是完全影响了我的操作,我会被错误地转移,或者它只会导致存储在逆向一个正确的结果需要扭转吗?
我想知道是否要为big-endian机器创建这个函数的第二个版本来进行(但未知)位操作,或者可能使用ntonl相关函数,我不清楚如何知道我的数字是否正确或不.
你有什么建议来确保兼容性,请记住我需要以这种方式形成整数?
只要您在价值水平上工作,无论您的机器是小端还是大端,您获得的结果都绝对没有区别.也就是说,只要你使用语言级的运算符(如|和<<在你的例子),你会从任何平台上的上述表达式得到完全相同的算术结果.机器的字节顺序无法检测到,并且在此级别不可见.
当您需要关心字节顺序时,唯一的情况是在对象表示级别检查您正在使用的数据,即在其原始内存表示很重要的情况下.你上面所说的" AB BC CD DE而不是DE CD BC AB"具体是关于数据的原始内存布局.这就是函数的作用ntonl:它们将一个内存布局转换为另一个内存布局.到目前为止,您没有表明实际的原始内存布局对您来说非常重要.是吗?
同样,如果您只关心上述表达式的值,则它完全且完全独立于字节序.基本上,当您编写不尝试访问和检查原始内存内容的C程序时,您根本不应该关心字节序.
| 归档时间: |
|
| 查看次数: |
4569 次 |
| 最近记录: |