【问题标题】:HEX Conversion (little-endian)十六进制转换(小端)
【发布时间】:2014-06-03 10:03:35
【问题描述】:

我希望有人可以帮助我!

我正在尝试弄清楚以下是如何完成的。下面的 Hex 存储为 little-endian:

ff3f fc7f 0040 0000 ffff f17f 0000 0280

我试图了解作者如何将其转换(或重写)为:

7FFC 3FFF 0000 4000 7FF1 FFFF 8002 0000

我已经在网上搜索过,但我很茫然:(

提前感谢所有可以提供帮助的人!

【问题讨论】:

  • 在这种情况下看起来值是 32 位,因此要交换字节顺序,您需要颠倒每个 32 位字中 4 个字节的顺序。所以ff3f fc7f 变成了7ffc 3fff,以此类推……
  • 嗨,Paul,感谢您回到我身边 - 那是前 4 个字节还是后 4 个字节?非常感谢!
  • 根据您的问题,我给出的示例是前 4 个字节。然后你对接下来的 4 个字节做同样的事情,依此类推......

标签: hex base


【解决方案1】:

这里是不同数据类型的转换函数(你的情况是无符号整数):

//-----------------------------------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------------------------------
inline void endian_swap(unsigned short& x)
{
    x = (x>>8) | 
        (x<<8);
}
//-----------------------------------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------------------------------
inline void endian_swap(unsigned int& x)
{
    x = (x>>24) | 
        ((x<<8) & 0x00FF0000) |
        ((x>>8) & 0x0000FF00) |
        (x<<24);
}
//-----------------------------------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------------------------------
inline void endian_swap(unsigned __int64& x)
{
    x = (x>>56) | 
        ((x<<40) & 0x00FF000000000000) |
        ((x<<24) & 0x0000FF0000000000) |
        ((x<<8)  & 0x000000FF00000000) |
        ((x>>8)  & 0x00000000FF000000) |
        ((x>>24) & 0x0000000000FF0000) |
        ((x>>40) & 0x000000000000FF00) |
        (x<<56);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多