对于特定需求,我正在用四个一字节字符构建一个四字节整数,没有使用任何特别的东西(在我的小端平台上):
return (( v1 << 24) | (v2 << 16) | (v3 << 8) | v4);
我知道存储在大端机器中的整数看起来像AB BC CD DE
代替DE CD BC AB
小字节序,尽管它会完全影响我的操作,因为我会错误地移位,或者它只会导致反向存储并需要反转的正确结果?
我想知道是否创建此函数的第二个版本来为大端机器执行(尚未知)位操作,或者可能使用 ntonl 相关函数,我不清楚它如何知道我的数字是否处于正确的顺序或不。
请记住,我确实需要以这种方式形成整数,您对确保兼容性有何建议?
只要你在工作valuelevel,无论您的机器是小端还是大端,您获得的结果绝对不会有任何差异。 IE。只要您使用语言级运算符(例如|
and <<
在您的示例中),您将在任何平台上从上述表达式获得完全相同的算术结果。机器的字节序在此级别不可检测且不可见。
您需要关心字节顺序的唯一情况是在以下位置检查您正在使用的数据:对象表示级别,即在其原始内存表示很重要的情况下。你上面说的“AB BC CD DE
代替DE CD BC AB
“专门关于数据的原始内存布局。这就是类似的功能ntonl
做:他们将一种内存布局转换为另一种内存布局。到目前为止,您没有表明实际的原始内存布局对您有任何重要意义。是吗?
再说一次,如果你只关心value对于上述表达式,它是完全独立于字节序的。基本上,当您编写不尝试访问和检查原始内存内容的 C 程序时,您根本不应该关心字节顺序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)