小端与大端

大端 = 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;

无论是哪种方式 Pals .. 十六进制与否它都没有得到正确的数字 .. Visual Studio 在它的调试器或我的整机中遇到严重错误..
因为我用更慢的冗余代码替换了整个代码但仍然得到相同的结果
顺便说一句,如果它有任何区别......我正在使用调试器在函数之后中断检查结果

最佳答案

  • 您是否正确打印了结果?
  • 您传递的是引用而不是值这一事实有什么不同吗?
  • 关于c++ - 小端 - 大端问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4169424/

    10-11 21:59