原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("\n"); 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文件。
有問題可以評論聯系作者交流,本文屬於原創,未經允許不得轉載或者用於其他用途。
