【发布时间】:2012-11-30 20:21:35
【问题描述】:
可能重复:
convert big endian to little endian in C [without using provided func]
我在这一部分遇到了麻烦:如果我想取一个 32 位数字,并且我想将它的字节(1 字节 = 8 位)从大端格式转换为小端格式。例如:
假设我有数字 1。
在 32 位中是这样的:
1st byte 2nd byte 3rd byte 4th byte
00000000 00000000 00000000 00000001
我想要它看起来像这样:
4th byte 3rd byte 2nd byte 1st byte
00000001 00000000 00000000 00000000
使具有最低有效值的字节首先出现。我在想你可以使用 for 循环,但我不确定如何在 C++ 中移动位/字节。例如,如果用户输入 1 并且我必须像上面的示例一样将其移位,我不确定如何将 1 转换为位,然后移位。谁能指出我正确的方向?谢谢!
【问题讨论】:
-
@NPE 如果不是同一种语言,怎么可能是重复的?
-
因为大多数(如果不是全部)关于数字及其运算的规则都从 C 继承到 C++?
-
@LuchianGrigore:当然,但在我看来它仍然是重复的,因为它明确地是关于“移位位和字节”,而不是关于“我如何以花哨的 C++ 风格做到这一点”。当然,社区可以做出其他决定。
-
@NPE imo 这里最优雅的解决方案没有任何位移。
-
@cHao 的想法是 C++ 中有更多的规则和选项。你会关闭一个关于标记为 C++ 的动态大小数组的问题,它是一个暗示后续
mallocs 的 C 问题的欺骗吗? 没有。您建议使用std::vector,即使适用相同的数字和运算规则。