阅读:1926回复:10
怎样在NDIS中把主机顺序转成网络顺序
我是新手,真是不好意思啦,在NDIS中用htons又不行,不知道在NDIS有没有这样的函数
|
|
最新喜欢:sword3... |
沙发#
发布于:2003-08-16 21:22
RtlUlongByteSwap?
RtlUshortByteSwap? //记不太清楚了,你去查查 |
|
|
板凳#
发布于:2003-08-16 21:38
自己写一个不得了。
ULONG ntohl( IN ULONG netlong ) { CHAR hostlong[4]; PCHAR pnetlong = (PCHAR)&netlong; hostlong[0] = pnetlong[3]; hostlong[1] = pnetlong[2]; hostlong[2] = pnetlong[1]; hostlong[3] = pnetlong[0]; return *(ULONG*)hostlong; } USHORT ntohs( IN USHORT netshort ) { CHAR hostshort[4]; PCHAR pnetshort = (PCHAR)&netshort; hostshort[0] = pnetshort[1]; hostshort[1] = pnetshort[0]; return *(USHORT*)hostshort; } |
|
地板#
发布于:2003-08-16 21:47
自己写一个不得了。 自己写确实可以,但是为什么不用DDK,提供的函数呢? //你写的函数的效率和稳定性比库函数还高? |
|
|
地下室#
发布于:2003-08-17 20:06
在ntddk里好象有这类函数98ddk里没有,所以你还是自己写一个吧
|
|
|
5楼#
发布于:2003-08-18 08:37
[quote]自己写一个不得了。 自己写确实可以,但是为什么不用DDK,提供的函数呢? //你写的函数的效率和稳定性比库函数还高? [/quote] 稳定性不感,效率难说~~~ :P |
|
|
6楼#
发布于:2003-08-18 13:28
[quote]自己写一个不得了。 自己写确实可以,但是为什么不用DDK,提供的函数呢? //你写的函数的效率和稳定性比库函数还高? [/quote] 这怎么说? 象这种函数,我都是直接拷贝原来的源程序在DDK里面编译,比如strcpy,strcmp之类的,如果没有源程序,我直接拷贝汇编代码。 我不认为这样会有效率和稳定性方面的问题。 |
|
7楼#
发布于:2003-08-18 14:54
赞同楼上观点,以下是汇编实现代码
ULONG __declspec(naked) __stdcall myhtonl(ULONG value) { __asm { mov eax,ecx mov edx,ecx shl eax,10h and edx,0FF00h or eax,edx mov edx,ecx shr edx,10h and ecx,0FF0000h or edx,ecx shl eax,8 shr edx,8 or eax,edx } } WORD __declspec(naked) __stdcall myhtons(WORD value) { __asm { mov eax,ecx xor edx,edx shr eax,8 mov dh,cl or eax,edx ret 4 } } 等同于 ntonl,ntons [编辑 - 8/18/03 by xiaodai] [编辑 - 8/18/03 by xiaodai] |
|
8楼#
发布于:2003-08-19 08:33
[quote][quote]自己写一个不得了。 自己写确实可以,但是为什么不用DDK,提供的函数呢? //你写的函数的效率和稳定性比库函数还高? [/quote] 这怎么说? 象这种函数,我都是直接拷贝原来的源程序在DDK里面编译,比如strcpy,strcmp之类的,如果没有源程序,我直接拷贝汇编代码。 我不认为这样会有效率和稳定性方面的问题。 [/quote] 萝卜白菜各有所爱 :) |
|
|
9楼#
发布于:2003-08-19 09:03
这种短小的函数自己把它写成宏,或定义成内联函数应该比调库函数效率高些吧!
|
|
|
10楼#
发布于:2003-08-19 13:22
宏的效率高一点,但调试比较困难
内联不失为一种好的做法, 如果你对你自己有信心的话, 可以以上方法 |
|