本文介绍了一种将char* 类型的Ipv6地址转换成BYTE(unsigned char)或者in6_addr类型的方法。
说明:使用时需要下载Ipv6++.lib和Ipv6++.dll(32位程序)
链接: https://pan.baidu.com/s/1C-dakhZRFbYBMp-wd4dcUw 密码: 5fcz
使用方法:
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: 在此处引用程序需要的其他头文件
// ConsoleApplication5.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
//如果需要使用in6_addr类型需要包含以下头文件
#include "WINSOCK2.H"
#include "in6addr.h"
#pragma comment (lib,"Ipv6++")
extern "C" int Ipv6AddrStringToByte(const char *pAddrV6Str, unsigned char *pOut);
extern "C" int Ipv6AddrStringToIn6_addr(const char *pAddrV6Str, in6_addr *pOut);
int main()
{
char *str = "2001:0DB8:0000:0023:0008:0800:200C:417A";
unsigned char b[16] = { 0 };
Ipv6AddrStringToByte(str, b);
for (int i = 0; i < 15; i++)
{
printf("%02x-", b[i]);
}
printf("\n");
in6_addr *p = new in6_addr();
Ipv6AddrStringToIn6_addr(str, p);
for (int i = 0; i < 15; i++)
{
printf("%02x-", p->u.Byte[i]);
}
delete p;
getchar();
return 0;
}
函数说明:Ipv6++.lib和Ipv6.dll由函数
NTSYSAPI
LONG
NTAPIRtlIpv6StringToAddressW (
_In_ PCWSTR S,
_Out_ PCWSTR *Terminator,
_Out_ struct in6_addr *Addr
);
封装而来,使用方法见Main文件。
有问题可以评论联系作者交流。