小端序与大端序
大端序 = 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 在其调试器中出现了严重错误,要么是我的整个机器..
因为我用一个更慢、冗余的代码替换了整个代码,但仍然得到相同的结果。
顺便说一句,如果有任何区别的话.. 我正在使用调试器在函数后面中断以检查结果。
y
。你打印出来的值是y
。这个程序的输出肯定是“822167888”。如果你打印出r
,你会看到反转的字节序。 - Steve Jessopcout << hex
,否则输出将会是十进制。 - Vlady
!为什么你认为你的函数endian_swap
会以任何方式修改y
?它不会。 - Steve Jessop