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
