原CSDN博客不再更新维护。
本文介绍了一种将char* 类型的Ipv6地址转换成BYTE(unsigned char)或者in6_addr类型的方法。
说明:使用时需要下载Ipv6++.lib和Ipv6++.dll(32位程序,64位程序可利用已有的函数自行编写)
链接: https://pan.baidu.com/s/1C-dakhZRFbYBMp-wd4dcUw 密码: 5fcz
使用方法:
1 // stdafx.h : 标准系统包含文件的包含文件, 2 // 或是经常使用但不常更改的 3 // 特定于项目的包含文件 4 // 5 6 #pragma once 7 8 #include "targetver.h" 9 10 #include <stdio.h> 11 #include <tchar.h> 12 13 14 15 // TODO: 在此处引用程序需要的其他头文件 16 17 18 // ConsoleApplication5.cpp : 定义控制台应用程序的入口点。 19 // 20 21 #include "stdafx.h" 22 23 //如果需要使用in6_addr类型需要包含以下头文件 24 #include "WINSOCK2.H" 25 #include "in6addr.h" 26 27 #pragma comment (lib,"Ipv6++") 28 29 extern "C" int Ipv6AddrStringToByte(const char *pAddrV6Str, unsigned char *pOut); 30 31 extern "C" int Ipv6AddrStringToIn6_addr(const char *pAddrV6Str, in6_addr *pOut); 32 33 int main() 34 { 35 char *str = "2001:0DB8:0000:0023:0008:0800:200C:417A"; 36 unsigned char b[16] = { 0 }; 37 Ipv6AddrStringToByte(str, b); 38 for (int i = 0; i < 15; i++) 39 { 40 printf("%02x-", b[i]); 41 42 } 43 printf(" "); 44 in6_addr *p = new in6_addr(); 45 46 Ipv6AddrStringToIn6_addr(str, p); 47 for (int i = 0; i < 15; i++) 48 { 49 printf("%02x-", p->u.Byte[i]); 50 51 } 52 delete p; 53 getchar(); 54 return 0; 55 }
函数说明:Ipv6++.lib和Ipv6.dll由函数
NTSYSAPI
LONG
NTAPI
RtlIpv6StringToAddressW (
_In_ PCWSTR S,//指向Ipv6地址的Wchar*指针
_Out_ PCWSTR *Terminator,//任意的PCWSTR的非空指针
_Out_ struct in6_addr *Addr//in6_addr类型的地址结构,在In6addr.h中定义
);
封装而来,使用方法见Main文件。
有问题可以评论联系作者交流,本文属于原创,未经允许不得转载或者用于其他用途。