OC网络学习22:将IP地址转换为字符串函数inet_ntop和inet_ntoa

张建 lol

前言

inet_ntopinet_ntoa 函数都是 用于将IP地址转换为字符串的函数

区别

  1. 语法不同
  • inet_ntoa
1
char * inet_ntoa(struct in_addr);

参数 struct in_addr:只需要传递一个二进制IP地址

  • inet_ntop
1
const char	*inet_ntop(int, const void *, char *, socklen_t);

参数 int:网络地址族。
参数 const void *:指向二进制IP地址的指针。
参数 char *:存储转换后IP地址字符串的缓冲区
参数 socklen_t:缓冲区大小

  1. 返回值类型不同
  • inet_ntoa: 直接返回转换后的IP地址字符串。

  • inet_ntop: 返回一个指向存储转换后IP地址字符串的指针;

  1. 可重入性不同
  • inet_ntoa:使用了静态变量来存储结果,因此它是非可重入的(即不能在多线程环境下使用)

  • inet_ntop:则是可重入的

简单使用

  • inet_ntoa
1
2
3
4
5
6
7
8
9
#include <arpa/inet.h>

struct in_addr addr;
inet_aton("192.168.0.1", &addr);

// 使用 inet_ntoa 函数
const char* result;
result = inet_ntoa(addr);
printf("Result of inet_ntoa: %s\n", result); // 输出 192.168.0.1
  • inet_ntop
1
2
3
4
5
6
7
8
9
10
#pragma mark - 获取ip地址
- (NSString *)hostFromSockaddr6:(const struct sockaddr_in6 *)pSockaddr6{
char addrBuf[INET6_ADDRSTRLEN];
// 将ip地址转字符串
if (inet_ntop(AF_INET6, &pSockaddr6->sin6_addr, addrBuf, (socklen_t)sizeof(addrBuf)) == NULL){
addrBuf[0] = '\0';
}

return [NSString stringWithCString:addrBuf encoding:NSASCIIStringEncoding];
}
  • Post title:OC网络学习22:将IP地址转换为字符串函数inet_ntop和inet_ntoa
  • Post author:张建
  • Create time:2023-07-27 10:05:24
  • Post link:https://redefine.ohevan.com/2023/07/27/OC网络/OC网络学习22:将IP地址转换为字符串函数inet_ntop和inet_ntoa/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
On this page
OC网络学习22:将IP地址转换为字符串函数inet_ntop和inet_ntoa