其他语言

本类阅读TOP10

·基于Solaris 开发环境的整体构思
·使用AutoMake轻松生成Makefile
·BCB数据库图像保存技术
·GNU中的Makefile
·射频芯片nRF401天线设计的分析
·iframe 的自适应高度
·BCB之Socket通信
·软件企业如何实施CMM
·入门系列--OpenGL最简单的入门
·WIN95中日志钩子(JournalRecord Hook)的使用

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
如何转换C代码中的高字和低字

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

HiWords and LoWords from Long Values

 When translating C code to VB, you quite often come across the HiWord and LoWord operators, used to pack two integers into a long value. A simple translation of HiWord code will run into difficulties when unsigned integer arithmetic is being
used in the C code and the highest bit of the long value can be set. Since VB doesn't support unsigned arithmetic we have to strip out the high bit and add it back again later to avoid overflows and misleading results.
 (当把C代码翻译到VB时,你经常会遇到高字和低字的操作,通常是把两个整型值合成一个长整型。当在C代码中使用了无符号整型,这最高一位是可以被设置的,因此简单的直接转换高字将会遇到困难。由于VB不支持无符号算术符,我们只好剥去这最高一位,在稍后再把它加回来,以避免溢出和错误的结果。)

 Start a new project then add a class module. Add the following code to the module:
 (开始一个新工程,增添一个类模块。把以下代码写入模块:)

Public Property Get LoWord(ByRef lThis As Long) As Long
  LoWord = (lThis And &HFFFF&)
End Property

Public Property Let LoWord(ByRef lThis As Long, ByVal lLoWord As Long)
  lThis = lThis And Not &HFFFF& Or lLoWord
End Property

Public Property Get HiWord(ByRef lThis As Long) As Long
  If (lThis And &H80000000) = &H80000000 Then
   HiWord = ((lThis And &H7FFF0000) \ &H10000) Or &H8000&
  Else
   HiWord = (lThis And &HFFFF0000) \ &H10000
  End If
End Property

Public Property Let HiWord(ByRef lThis As Long, ByVal lHiWord As Long)
  If (lHiWord And &H8000&) = &H8000& Then
   lThis = lThis And Not &HFFFF0000 Or ((lHiWord And &H7FFF&) * &H10000) Or &H80000000
  Else
   lThis = lThis And Not &HFFFF0000 Or (lHiWord * &H10000)
  End If
End Property

  调用时,假定类模块取名CHiLo

Dim chl As New CHiLo
Dim a As Long
chl.LoWord(a) = &HFFFF0
chl.HiWord(a) = &HFFFF1
Me.Caption = Hex(a)

  如此便可以正确无误地将高字和低字合成在一起。


相关文章

相关软件