huyugui
驱动牛犊
驱动牛犊
  • 注册日期2003-01-22
  • 最后登录2003-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1926回复:10

怎样在NDIS中把主机顺序转成网络顺序

楼主#
更多 发布于:2003-08-15 15:12
我是新手,真是不好意思啦,在NDIS中用htons又不行,不知道在NDIS有没有这样的函数

最新喜欢:

sword3isword3...
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-16 21:22
RtlUlongByteSwap?
RtlUshortByteSwap?
//记不太清楚了,你去查查
放弃瘟草,现吃李草
david99
驱动牛犊
驱动牛犊
  • 注册日期2001-06-02
  • 最后登录2010-12-03
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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;
}
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-16 21:47
自己写一个不得了。


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;
}



自己写确实可以,但是为什么不用DDK,提供的函数呢?
//你写的函数的效率和稳定性比库函数还高?
放弃瘟草,现吃李草
king229
驱动中牛
驱动中牛
  • 注册日期2003-04-29
  • 最后登录2012-04-10
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-08-17 20:06
在ntddk里好象有这类函数98ddk里没有,所以你还是自己写一个吧
鬼啊~~~~~~~~
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-08-18 08:37
[quote]自己写一个不得了。


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;
}



自己写确实可以,但是为什么不用DDK,提供的函数呢?
//你写的函数的效率和稳定性比库函数还高? [/quote]

稳定性不感,效率难说~~~


 :P
[color=red]大头鬼! :P[/color]
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
6楼#
发布于:2003-08-18 13:28
[quote]自己写一个不得了。


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;
}



自己写确实可以,但是为什么不用DDK,提供的函数呢?
//你写的函数的效率和稳定性比库函数还高? [/quote]
这怎么说?
象这种函数,我都是直接拷贝原来的源程序在DDK里面编译,比如strcpy,strcmp之类的,如果没有源程序,我直接拷贝汇编代码。
我不认为这样会有效率和稳定性方面的问题。
xiaodai
驱动牛犊
驱动牛犊
  • 注册日期2002-10-22
  • 最后登录2004-06-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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]
antspower
驱动中牛
驱动中牛
  • 注册日期2002-10-17
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值2点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-08-19 08:33
[quote][quote]自己写一个不得了。


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;
}



自己写确实可以,但是为什么不用DDK,提供的函数呢?
//你写的函数的效率和稳定性比库函数还高? [/quote]
这怎么说?
象这种函数,我都是直接拷贝原来的源程序在DDK里面编译,比如strcpy,strcmp之类的,如果没有源程序,我直接拷贝汇编代码。
我不认为这样会有效率和稳定性方面的问题。 [/quote]


萝卜白菜各有所爱 :)
放弃瘟草,现吃李草
Dino
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2007-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-08-19 09:03
这种短小的函数自己把它写成宏,或定义成内联函数应该比调库函数效率高些吧!
Death is only the beginning
xiaodai
驱动牛犊
驱动牛犊
  • 注册日期2002-10-22
  • 最后登录2004-06-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-08-19 13:22
宏的效率高一点,但调试比较困难
内联不失为一种好的做法,
如果你对你自己有信心的话,
可以以上方法
游客

返回顶部