VB.NET编程:VB也能访问内存

有人说vb不能操作内存,效率低下,我不是太赞同。vb跟c比当然效率比较低下了,但是如果使用得当还是有不少的效率提高的。

在开发windows上的应用时(注意啊,不是驱动),理论上来说,用vb可以做任何软件。因为vb本身没有的,可以使用api,而win32 api时可以实现windows上的任何应用功能的。当然这和使用者的功力有很大的关系,如果c/c++的功力很好,你甚至可以用vb实现内存拷贝的功能,因为long类型可以做指针。

最近在做界面, 对vb有点研究, 给个例子吧。比如10进制转换2进制。

用vb的一般用除法这么做:

public function o2b(byval long nValue) as string

dim nValueCopy as long

dim nTmp as byte ‘商

dim sReturn as string ‘返回值

nValueCopy = nValue

‘也有用nValue – 2^N 方式的,这里就不多说了

do while nValueCopy > 0

nTmp = nValueCopy / 2

sReturn = cstr( nValueCopy – nTmp / 2 ) & sReturn  ‘反向累计

nValueCopy = nTmp

loop

o2b = sReturn

end function

而用c比较熟的人一般按位去做:

public function o2b(byref long nValue) as string

dim nBit( 0 to 7 ) as byte       ‘ 最小的单位是byte了,放掩码

dim nByte( 1 to 4 ) as byte     ‘ 分解nValue到字节的

dim nTmp as byte

dim pValue as long                ‘ 指针

dim sReturn as string             ‘ 返回值

dim i as byte, j as byte

nBit(0) = 1            ‘00000001

nBit(1) = 2            ‘00000010

nBit(2) = 4            ‘00000100

nBit(3) = 8            ‘00001000

nBit(4) = 16           ‘00010000

nBit(5) = 32           ‘00100000

nBit(6) = 64           ‘01000000

nBit(7) = 128         ‘10000000

‘ 取 nValue 的地址

pValue = VarPtr( nValue )

‘ win32 api, 将nValue的4个字节分别复制到nByte中,byref 就相当于指针

CopyMemory( nByte(1), byref pValue, 4 )

for i = 4 to 1      ‘低字节在前

for j = 7 to 0    ‘高位开始

‘ 方法一, 减法

nTmp = 0

if nByte(i) > nBit(j) then

nByte = nByte(i) – nBit(j)

nTmp = 1           ‘ 这一位二进制是1

end if

sReturn = sReturn & cstr(nTmp)

‘ 方法二,按位与 效率更高

nTmp = 1

if ( not ( nByte(i) imp nBit(j) ) ) = nBit(j) then

‘ 我没有找到vb按位与的函数,只有按位”同与”(不记得是不是)的imp

nTmp = 0

end if

sReturn = sReturn & cstr(nTmp)

next j, i

o2b = sReturn

end function

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值