我只知道0x2A是一个1Byte的长度的内容,现在我需要知道他的每一个bit位的值,我怎么才能实现?
我想取出2,和A,单独转成bit位,可是怎么取出2,A呢?
我想取出2,和A,单独转成bit位,可是怎么取出2,A呢?
解决方案 »
- vb控件的问题
- 控件如何根据单元格进行定位?(结帖后追50),谢谢各位
- 怎么样在vb的datagrid中实现显示access数据库中的部分字段?
- 菜问题:为什么老说我“表达式中‘ROUND’函数未定义”
- 急!!为什么我用winsock只能传送文本文件?图片在传送成功后打不开?在线等待!
- 关于Dll的问题,高手请进!在线等待!谢谢……
- 请教:如何用代码实现菜单的重建。谢谢。
- 关于屏保
- Ado的Command对象返回的Recordset是不是不能修改啊?不可能吧,帮帮我!
- VB做一个数据库查询小程序,请教各位。谢谢
- 怎么能用鼠标拖动改变ListBox控件的高度?
- 关于App.path的问题,忙了好长一段时间,最后一步了!急!!在线等!
将诸如0x2A这类的字符串转换为10进制的原型如下(没有在VB里调过):
strSou为输入的0x2A这类的字符串
dim strHex as string
dim intHi as integer,intLow as integer
dim intRet as integerstrHex="0123456789ABCDEF"intHi=instr(1,strHex,mid$(strSou,3,1))-1
intLow=instr(1,strHex,mid$(strSou,4,1))-1
intRet=intHi*16+intLow
instr函数的写法有些忘了,总之就是在strHex搜索2、A的位置,然后一乘一加就ok了。
至于从10进制转2进制的程序很简单,用个循环不断去除2就完事了,我这里只提供一段程序原型来判断一个数2进制下的某一位是否为1,很简单的,比如要判断321123这个数的第6位是否为1只要这么作:
if 321123 and (2^6) then
...
b = Val(Replace(a, "0x", "&h")) (b and 1)<>0 第1个bit为1
(b and 2)<>0 就是第2个bit为1
(b and i^n)<>0 就是第n-1个bit 为1
可是我要取2,A时,mid("0x2a",3,1)取的是2么? 0x2A前提是1byte长度,我就迷在怎么取2,A
Msgbox GetByte(5,1)'取出数字5的第一个字节的值!
Private Function GetByte(ByVal btS As Byte, ByVal btPos As Byte) As Byte
Select Case btPos
Case 1
If (btS And &H1) = &H1 Then
GetByte = 1
Else
GetByte = 0
End If
Case 2
If (btS And &H2) = &H2 Then
GetByte = 1
Else
GetByte = 0
End If
Case 3
If (btS And &H4) = &H4 Then
GetByte = 1
Else
GetByte = 0
End If
Case 4
If (btS And &H8) = &H8 Then
GetByte = 1
Else
GetByte = 0
End If
Case 5
If (btS And &H10) = &H10 Then
GetByte = 1
Else
GetByte = 0
End If
Case 6
If (btS And &H20) = &H20 Then
GetByte = 1
Else
GetByte = 0
End If
Case 7
If (btS And &H40) = &H40 Then
GetByte = 1
Else
GetByte = 0
End If
Case 8
If (btS And &H80) = &H80 Then
GetByte = 1
Else
GetByte = 0
End If
End Select
End Function
如果是从winsock来的,我想应该是数值,而不是字符串,至于与你进行通信的另一端所说的“我传给你一个0x2A,你怎么怎么样”诸如此类的话,我想他的意思是发给你一个byte的信息,即16进制的2A(42),而不是4个byte:“0”、“x”、“2”、“A”。