java ipv6转换成ipv4,如何映射IPv4的IPv6地址转换为IPv4(字符串格式)?「建议收藏」

IhaveastructsockaddrstructurecontaininganIPv4-mapped-IPv6addresslike::ffff:10.0.0.1.IwanttoobtainonlytheIPv4versionofitinastring(inthiscase,10.0.0.1)inCprogramminglangu…

大家好,又见面了,我是你们的朋友全栈君。

java ipv6转换成ipv4,如何映射IPv4的IPv6地址转换为IPv4(字符串格式)?「建议收藏」

I have a struct sockaddr structure containing an IPv4-mapped-IPv6 address like ::ffff:10.0.0.1. I want to obtain only the IPv4 version of it in a string (in this case, 10.0.0.1) in C programming language. How do I go about achieving it?

解决方案

As your structure contains an IPV6 address, I’ll assume your have a struct sockaddr * pointer (let’s name it addrPtr) pointing to a struct sockaddr_in6 structure.

You can get the address bytes easily.

const uint8_t *bytes = ((const struct sockaddr_in6 *)addrPtr)->sin6_addr.s6_addr;

Then add 12 to the pointer because the 12 first bytes are not interesting (10 0x00, then 2 0xff). Only the 4 last ones mater.

bytes += 12;

Now, we can use those four bytes to do whatever we want. For example, we might store them into a IPv4 struct in_addr address.

struct in_addr addr = { *(const in_addr_t *)bytes };

Then we can get a string using inet_ntop (declared in ).

char buffer[16]; // 16 characters at max: “xxx.xxx.xxx.xxx” + NULL terminator

const char *string = inet_ntop(AF_INET, &addr, buffer, sizeof(buffer));

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128408.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么叫结构化数据半结构化数据和非结构化数据(xml是非结构化数据)

    计算机信息化系统中的数据分为结构化数据和非结构化数据、半结构化数据。结构化数据结构化数据,是指由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。也称作行数据,一般特点是:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。比如: id name gen…

    2022年4月17日
    53
  • Python zipfile简介「建议收藏」

    Python zipfile简介「建议收藏」从简单的角度来看的话,zip格式会是个不错的选择,而且python对zip格式的支持够简单,够好用。1)简单应用如果你仅仅是希望用python来做压缩和解压缩,那么就不用去翻文档了,这里提供一个简单的用法,让你一看就能明白。importzipfilef=zipfile.ZipFile(‘filename.zip’,’w’,zipfile.ZIP_DEFLATED)f.write(…

    2022年9月16日
    3
  • Java核心技术卷一学习笔记1

    Java核心技术卷一学习笔记1在搞本科生毕设之余,闲下来看看书,写写博客。由于研究生学习要做一个数据可视化的项目,需要用到Java。所以拿了一本《Java核心技术卷一》正在一步步复习之前所学的Java知识。   3.9大数值   如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。

    2025年8月7日
    2
  • 使用StopWatch计算耗时[通俗易懂]

    使用StopWatch计算耗时[通俗易懂]一、传统计算耗时方式一般采用System.currentTimeMillis()来获取时间,然后打印当前时间与任务开始执行时间的差值。记录开始时间点记录结束时间点输出当前时间与任务开始执行时间的差值代码如下:publicstaticvoidmain(String[]args)throwsInterruptedException{longstartTime=System.currentTimeMillis();//dos

    2022年6月23日
    27
  • 全网最全Linux 运行jar包的几种方式[通俗易懂]

    全网最全Linux 运行jar包的几种方式[通俗易懂]一、Linux运行jar包的几种方式方式一:java-jarxxx.jar最常用的启动jar包命令,特点:当前ssh窗口被锁定,可按CTRL+C打断程序运行,或直接关闭窗口,程序退出方式二:java-jarxxx.jar&&代表在后台运行,ctrl+c后程序也会继续运行方式三:nohupjava-jarxxx.jar&nohup即nohangup不挂断,关闭SSH客户端连接,程序不会中止运行缺省情况下该作业的所

    2022年10月5日
    3
  • Linux下tomcat的安装与项目部署

    Linux下tomcat的安装与项目部署

    2021年9月16日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号