gpt4 book ai didi

c - 在大端机器中对小端整数进行简单的按位操作?

转载 作者:太空狗 更新时间:2023-10-29 15:14:25 24 4
gpt4 key购买 nike

为了满足特定需求,我用四个单字节字符构建了一个四字节整数,没有使用任何特别的东西(在我的小端平台上):

    return (( v1 << 24) | (v2 << 16) | (v3 << 8) | v4);

我知道存储在大端机器中的整数看起来像 AB BC CD DE 而不是小端的 DE CD BC AB,尽管它会影响我的操作完全是因为我会错误地移动,还是会导致正确的结果以反向存储并需要反向?

我想知道是否要创建此函数的第二个版本来对大端机器进行(尚未知)位操作,或者可能使用 ntonl 相关函数,我不清楚它如何知道我的号码是顺序是否正确。

要确保兼容性,请记住我确实需要以这种方式形成整数,您有什么建议?

最佳答案

只要您在 级别工作,无论您的机器是小端还是大端,您获得的结果绝对没有区别。 IE。只要您使用语言级运算符(如示例中的 |<<),您将在任何平台上从上述表达式获得完全相同的算术结果。机器的字节序是不可检测的,在这个级别是不可见的。

唯一需要关心字节顺序的情况是在对象表示级别检查您使用的数据时,即在其原始内存表示很重要的情况下。您上面所说的“AB BC CD DE 而不是 DE CD BC AB ”专门针对数据的原始内存布局。这就是 ntonl 的功能做:他们将一种内存布局转换为另一种内存布局。到目前为止,您没有任何迹象表明实际的原始内存布局对您很重要。是吗?

同样,如果您只关心上述表达式的,那么它完全与字节顺序无关。基本上,当您编写不尝试访问和检查原始内存内容的 C 程序时,您根本不应该关心字节顺序。

关于c - 在大端机器中对小端整数进行简单的按位操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5642981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com