阅读:1870回复:9
怎样将32位无符整数ip 地址格式化成ip串呢?
rt,最好格式化成PCHAR类型,在用户态可以用inet_ntoa(),
在IM里,怎么做呢?我想这个问题每位大虾都做过,应该不难回答吧! ;) [编辑 - 4/30/03 by shrimp] |
|
|
沙发#
发布于:2003-04-30 10:45
如从结构里返回
typedef struct _IpHead { unsigned char HeaderLength_Version; unsigned char TypeOfService; // Type of service unsigned short TotalLength; // total length of the packet unsigned short Identification; // unique identifier unsigned short FragmentationFlags; // flags unsigned char TTL; // Time To Live unsigned char Protocol; // protocol (TCP, UDP etc) unsigned short CheckSum; // IP Header checksum unsigned int sourceIPAddress; // Source address unsigned int destIPAddress; // Destination Address } IpHead, *PIpHead; 如获取的PIpHead->sourceIPAddress; 怎样格式化成xxx.xxx.xxx.xxx 的IP 字符串呢? 能这么做吗? PCHAR s; s=(PCHAR)&PIpHead->sourceIPAddress; 其中s[0],~s[3]为IP字节. 这样行吗? |
|
|
板凳#
发布于:2003-04-30 14:56
没人理我呀! :)
|
|
|
地板#
发布于:2003-04-30 18:15
一天了,都没人理我呀!!! :( :( :(
是问题说都不够清楚吗? 其实经过下面转换之后 s=(PUCHAR)&PIpHead->sourceIPAddress; 再DbgPrint(\"%d.%d.%d.%d\",s[0],s[1],s[3],s[4]); 可以打印出xxx.xxx.xxx.xxx格式的IP. 但怎样把它转换成\"xxx.xxx.xxx.xxx\"字符串呢?? 那位大侠指点指点,分太少的话,我再开一贴? 不胜感谢!!! |
|
|
地下室#
发布于:2003-05-01 03:16
Try inet_ntoa(dwIpAddress) or just write a piece of code to do that:
sprintf(str,\"%d.%d.%d.%d\" , ...) [编辑 - 5/1/03 by ndisworker] [编辑 - 5/1/03 by ndisworker] |
|
5楼#
发布于:2003-05-01 15:44
Try inet_ntoa(dwIpAddress) or just write a piece of code to do that: 在驱动里不能用inet_ntoa()! 我现在的问题是将相应的十进制(如192)或十六进制0xC0对应的十进制192转换成\"192\"这样的字符串. |
|
|
6楼#
发布于:2003-05-01 16:44
各位大侠都不肯解答这个问题,看来是,一开始我自己的思搞错了,
在驱动里进行IP 地址的比较应该直接用32位无符地址,而没有必要转换, 而应用程序传给驱动的也应为32位无符地址便可以了,:(致于我为什么会提出这一个问题呢,主要是我在用户态传给内核态的值是字符串。 弄明白了,回头改一改代码吧! :cool: :cool: |
|
|
7楼#
发布于:2003-05-01 16:47
不过我还是希望有高手解决这个问题, 改程序是一件痛苦的事!!
|
|
|
8楼#
发布于:2005-04-14 11:14
NdisInitUnicodeString
|
|
9楼#
发布于:2005-04-19 16:16
自己写个函数,一个字节一个字节转呗,或者你就把字符串倒过来转换为整数好了。
|
|