当前位置:首页 C++ > 正文

C++小端转大端

作者:野牛程序员:2023-07-16 07:03:02 C++阅读 2781

在C++中,可以使用一些位操作和字节序转换函数来实现小端(Little-Endian)和大端(Big-Endian)之间的转换。下面是一个示例代码,演示了如何在小端和大端之间进行转换:

#include <iostream>
#include <cstdint>

// 函数用于判断当前系统的字节序是否为小端
bool isLittleEndian()
{
    uint16_t num = 0x0001;
    uint8_t* ptr = reinterpret_cast<uint8_t*>(&num);
    return (ptr[0] == 0x01);
}

// 函数用于将小端表示的16位整数转换为大端表示
uint16_t littleEndianToBigEndian16(uint16_t num)
{
    uint16_t bigEndianNum = ((num & 0xFF00) >> 8) | ((num & 0x00FF) << 8);
    return bigEndianNum;
}

// 函数用于将小端表示的32位整数转换为大端表示
uint32_t littleEndianToBigEndian32(uint32_t num)
{
    uint32_t bigEndianNum = ((num & 0xFF000000) >> 24) | ((num & 0x00FF0000) >> 8) |
                            ((num & 0x0000FF00) << 8) | ((num & 0x000000FF) << 24);
    return bigEndianNum;
}

int main()
{
    // 检查当前系统的字节序
    std::cout << "Current system is " << (isLittleEndian() ? "Little-Endian" : "Big-Endian") << std::endl;

    // 转换示例
    uint16_t littleEndianNum16 = 0x1234;
    uint16_t bigEndianNum16 = littleEndianToBigEndian16(littleEndianNum16);
    std::cout << "Converted 16-bit number: " << std::hex << bigEndianNum16 << std::endl;

    uint32_t littleEndianNum32 = 0x12345678;
    uint32_t bigEndianNum32 = littleEndianToBigEndian32(littleEndianNum32);
    std::cout << "Converted 32-bit number: " << std::hex << bigEndianNum32 << std::endl;

    return 0;
}

上述代码中,isLittleEndian()函数用于判断当前系统的字节序是否为小端。littleEndianToBigEndian16()函数用于将小端表示的16位整数转换为大端表示,它通过位操作将高位字节和低位字节互换位置。littleEndianToBigEndian32()函数用于将小端表示的32位整数转换为大端表示,它使用类似的位操作来交换字节的顺序。

main()函数中,首先输出当前系统的字节序。然后,示范了将16位整数和32位整数从小端转换为大端的过程,并输出转换后的结果。

请注意,上述代码是根据当前系统的字节序进行转换的。如果需要与其他系统交互,可能需要进行字节序的转换。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击