C++ 大小端转换函数示例
时间: 2024-10-05 21:02:42 浏览: 38
C++代码实例:数制转换
在C++中,大小端(endianness)是指数据存储时字节序的不同,即低位字节(Least Significant Byte, LSB)是否先于高位字节(Most Significant Byte, MSB)存储。标准库提供了一些函数来进行这种转换。例如:
1. `std::endian` 模板类用于检测主机的字节顺序,有三种模式:
```cpp
#include <endian>
// 检查当前平台是大端还是小端
static constexpr bool is_big_endian = std::is_big_endian<std::byte>::value;
```
2. 如果需要实际进行字节交换,可以使用 `htonl`, `ntohl`, `htons`, 和 `ntons` 等函数(它们的头文件通常是 `<arpa/inet.h>`),针对整数类型如 `int` 和 `long`:
- `uint32_t htonl(uint32_t hostshort);` 将主机字节序转换成网络字节序的无符号32位整数。
- `uint16_t htons(uint16_t hostshort);` 同理,将16位短整型转换。
```cpp
#include <arpa/inet.h>
#include <cstdint>
// 示例:假设已知本地是小端,在网络环境下发送数据
uint32_t local_int = 0x12345678;
if (is_big_endian) {
uint32_t network_int = htonl(local_int);
// 发送 network_int 的值
} else {
// 直接使用 local_int,因为本地已经是网络字节序(对于小端)
}
```
阅读全文