RtlMoveMemory和copymemory函数

lclichao2006 2009-02-19 10:49:49
RtlMoveMemory是API原名,在VB的API浏览器中的化名就是著名的CopyMemory
新建个模块,将一下代码考入模块, 在将启动项改为sub main 就可以运行了
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory"
(pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Option Explicit
Declare Sub RtlMoveMemory Lib "KERNEL32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
Sub Main()
Dim L1 As Long, L2 As Long
L1 = &H11223344
RtlMoveMemory L2, L1, 4
MsgBox "L2=" & Hex(L2)
End Sub

AND

Option Explicit
Declare Sub RtlMoveMemory Lib "KERNEL32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
Sub Main()
Dim bArr(3) As Byte, L As Long
L = &H11223344
RtlMoveMemory bArr(0), L, 4
MsgBox "bArr=" & Hex(bArr(0)) & Hex(bArr(1)) & Hex(bArr(2)) & Hex(bArr(3))
End Sub

这俩个运行结果怎么差那么多,尤其是第二个怎么运行结果是44332211?????
...全文
1509 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lclichao2006 2009-02-19
  • 打赏
  • 举报
回复
明白了,谢谢楼主了
zhangtian2009 2009-02-19
  • 打赏
  • 举报
回复
RUN("mstsc.exe") ;先是启动远程登陆程序
winwait("远程桌面连接") ;程序暂停到指定窗口出现为止
winactivate("远程桌面连接") ;激活指定窗口
send("主机地址") ;自动输入服务器IP
send("!n") ;然后是连接!n=alt+n
;下面就开始输入密码
winwait("主机地址 - 远程桌面")
winactivate("主机地址 - 远程桌面") ;激活指定窗口
send("123456") ;这个是密码
send("{enter}");最后按回车进入

给为老大 帮我ikankanzhduan代码好啊 怎么能在VB中实现它呢
神马都能聊 2009-02-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 unsigned 的回复:]
正由于机器字节序存在差异,所以在网络通讯标准当中引入了一个网络字节序的概念,它的定义就是通过识别机器的字节序,然后转换成一种统一的big-endian字节序.
[/Quote]
听君一席话,茅塞顿开啊.
以前看TCP/IP协议时,死是个没搞懂为啥非要这样转,原来如此,太感谢了.
僵哥 2009-02-19
  • 打赏
  • 举报
回复
正由于机器字节序存在差异,所以在网络通讯标准当中引入了一个网络字节序的概念,它的定义就是通过识别机器的字节序,然后转换成一种统一的big-endian字节序.
僵哥 2009-02-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lclichao2006 的回复:]
是这样吗,我第二个程序将11223344换成44332211,
则运行的结果就是11223344了,所以掌柜的你那样说是不对的
[/Quote]
经x86体系的CPU下运行,就是楼主现在看到的结果,x86体系在存储多字节数据的时候是按低字节到高字节的顺序存储的,所以0x11223344当中就被按照0x44,0x33,0x22,0x11如此的顺序存储,其它如Sun的机器则是按0x11,0x22,0x33,0x44的顺序存储的,这个叫作机器字节序(host byte order)
lclichao2006 2009-02-19
  • 打赏
  • 举报
回复
是这样吗,我第二个程序将11223344换成44332211,
则运行的结果就是11223344了,所以掌柜的你那样说是不对的
Tiger_Zhao 2009-02-19
  • 打赏
  • 举报
回复
&H11223344 是按人的书写习惯表示的一个逻辑值,与你使用 Windows 还是 Mac 机无关。
Windows 的字节序叫 little-endian,意思是低字节存放在前面,表示时一般字节中间加分隔符以示区分 "44-33-22-11"。
PctGL 2009-02-19
  • 打赏
  • 举报
回复

你的结果充分的说明,你的测试过程准确无误

你可以再把那个 44332211 copymemory 复制到一个 long 变量里面,看看结果

这是windows所采用的一种算法? 表示方法? 忘了该叫什么了,这种方法比较接近现实

因为内存是由低到高的排列的
44332211
也是由低到高排列的,如果翻译成人理解这串数据的意思,就应该是 11223344 了,由高到低

这些都是自左至右说的, 这涉及到一个很专业很有名的算法,我也忘了叫啥了... 去找找看吧

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧