大小端转换函数c++
时间: 2024-12-07 11:13:25 浏览: 54
在C++中,大小端转换是指在不同字节序(Endianness)之间转换数据的过程。字节序分为大端序(Big Endian)和小端序(Little Endian)。大端序是指高位字节存储在低地址,而小端序是指低位字节存储在低地址。
以下是一个简单的大小端转换函数示例:
```cpp
#include <iostream>
#include <cstdint>
// 将一个16位整数从主机字节序转换为网络字节序(大端序)
uint16_t htons(uint16_t hostshort) {
uint16_t result;
uint8_t* host = reinterpret_cast<uint8_t*>(&hostshort);
uint8_t* net = reinterpret_cast<uint8_t*>(&result);
net[0] = host[1];
net[1] = host[0];
return result;
}
// 将一个32位整数从主机字节序转换为网络字节序(大端序)
uint32_t htonl(uint32_t hostlong) {
uint32_t result;
uint8_t* host = reinterpret_cast<uint8_t*>(&hostlong);
uint8_t* net = reinterpret_cast<uint8_t*>(&result);
net[0] = host[3];
net[1] = host[2];
net[2] = host[1];
net[3] = host[0];
return result;
}
// 将一个16位整数从网络字节序(大端序)转换为主机字节序
uint16_t ntohs(uint16_t netshort) {
return htons(netshort);
}
// 将一个32位整数从网络字节序(大端序)转换为主机字节序
uint32_t ntohl(uint32_t netlong) {
return htonl(netlong);
}
int main() {
uint16_t host16 = 0x1234;
uint32_t host32 = 0x12345678;
uint16_t net16 = htons(host16);
uint32_t net32 = htonl(host32);
std::cout << "Host 16-bit: " << std::hex << host16 << std::endl;
std::cout << "Network 16-bit: " << std::hex << net16 << std::endl;
std::cout << "Host 32-bit: " << std::hex << host32 << std::endl;
std::cout << "Network 32-bit: " << std::hex << net32 << std::endl;
return 0;
}
```
这个示例中,`htons`和`htonl`函数用于将主机字节序转换为网络字节序(大端序),`ntohs`和`ntohl`函数用于将网络字节序转换为主机字节序。
阅读全文
相关推荐


















