使用按位运算符进行字节序转换的通用交换例程

时间:2020-03-22 05:18:34

标签: c++

我想知道如何使用通用交换例程使用按位运算符将网络字节顺序数据(int的浮点数)转换为本地字节顺序。到目前为止,我已经编写了一个通用交换例程,该例程将任何长度的字节数据转换为本地字节顺序。这是我的惯例:

static bool isBigEndian() {
    int a = 1;
    char* b = (char*)&a;

    if(*b == 1)
        return true;

    return false;
}

static void swapBytes(void *data, size_t len) {
    unsigned char *start, *end;

    if(!isBigEndian())
    {
        for ( start = (unsigned char *)data, end = start + len - 1; start < end; ++start, --end )
        {
            unsigned char swap = *start;
            *start = *end;
            *end = swap;
        }
    }
}

我知道这在性能方面不是很有效,这就是为什么我想使用按位运算符来实现相同功能,而是将其作为适用于任何长度字节数据的通用交换例程来实现的原因。

0 个答案:

没有答案