【发布时间】:2011-05-09 08:07:50
【问题描述】:
小端与大端
大端 = 0x31014950
小尾数 = 0x50490131
但是使用这种方法
inline unsigned int endian_swap(unsigned int& x)
{
return ( ( (x & 0x000000FF) << 24 ) |
( (x & 0x0000FF00) << 8 ) |
( (x & 0x00FF0000) >> 8 ) |
( (x & 0xFF000000) >> 24 ) );
}
结果 = 0x54110131
我花了很多时间尝试了很多类似的方法,甚至像
unsigned long _byteswap_ulong(unsigned long value);
但仍然没有运气.. 都返回相同的结果
编辑
我正在使用 Microsoft Visual Studio 2008 开发 Little-Endian 系统
示例如下
int main()
{
unsigned int y = 0x31014950;
unsigned int r = endian_swap( y );
std::cout << r;
}
在 Ideone.com 上发布的示例是正确的 .. 但它不适用于我
编辑
std::cout << std::hex << r;
无论是朋友.. 十六进制与否,它都没有得到正确的数字.. Visual Studio 的调试器或我的整台机器出现严重错误..
因为我用更慢的冗余代码替换了整个代码,但仍然得到相同的结果
顺便说一句,如果它有任何区别..我在函数之后使用调试器来中断来检查结果
【问题讨论】:
-
你使用的是返回值,对吧?当您引用
x时,您从未实际修改它。 -
@VirusEcks:展示你的完整程序,一群人围坐在一起猜测你做错了什么是没有意义的。
-
所以当你说“我使用return”时,你是什么意思?该函数不会修改
y。你打印出来的值是y。这个程序的输出肯定是“822167888”。如果你打印出r,你会看到字节序反转的值。 -
@Steve: 我们需要
cout << hex,否则我们得到十进制输出 -
@VirusEcks:你好!您正在打印
y!为什么您会认为您的函数endian_swap会以任何方式修改y?它没有。
标签: c++ endianness