100分求解,在线等,解决立刻给分

shuliangqing 2004-09-23 03:01:59
无论是何种类型,比如STRING,比如ASC码,我只想要该字节数据的二进制的值,应该怎么做
...全文
124 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuliangqing 2004-09-24
  • 打赏
  • 举报
回复
正确答案是这样的,只要把MSComm1.InputMode= ComInputModeBinary,即用二进制方式接收,用一个BYTE数组来保存Buffer=MSComm1.Input,然后做CRC校验
行云边 2004-09-23
  • 打赏
  • 举报
回复
Modbus(CRC)校验例程
Public Function CrcResult(ByVal Data As Long, ByVal Genpoly As Long, ByVal CrcData As Long) As Long

Dim TmpI As Integer

Data = Data * 2

For TmpI = 8 To 1 Step -1

Data = Fix(Data / 2)


If ((Data Xor CrcData) And 1) Then

CrcData = Fix(CrcData / 2) Xor Genpoly

Else

CrcData = Fix(CrcData / 2)

End If


Next TmpI

CrcResult = CrcData

End Function

 

//函数应用方法

Dim fx(7)

Dim crc As Long

fx(0) = Val(Text2.Text)

fx(1) = &H3

fx(2) = &H0

fx(4) = &H0

fx(5) = &H1

fx(3) = MDI.Combo3.ListIndex

crc = &HFFFF&

For TmpI = 0 To 5

crc = CrcResult(CLng(fx(TmpI)), &HA001&, crc)

Next

fx(6) = CByte(crc And &HFF&) ‘得到的校验高位

fx(7) = CByte(Fix(crc / 256) And &HFF&) ‘得到的校验低位

libingao 2004-09-23
  • 打赏
  • 举报
回复
Option Explicit

Private Sub Command1_Click()
Dim a As String
Dim b As String

a = GetBinary("abc")
MsgBox a ' 输出 二进制
b = GetStrValue(a)
MsgBox b ' 输出 源字符
End Sub

Private Function GetBinary(vData As String) As String '将字符换成二进制转的函数
Dim MyData As Long
Dim S As String, Y As String
Dim I As Integer

Const Bins = "0000000100100011010001010110011110001001101010111100110111101111"
MyData = AscB(vData)
Y = Hex(MyData)
S = ""
For I = 1 To Len(Y)
S = S + Mid(Bins, (Val("&h" + Mid(Y, I, 1)) * 4 + 1), 4)
Next I
GetBinary = Trim(S) 'Format(s, "0")
End Function

Private Function GetStrValue(vData As String) As String '将二进制转换成字符的函数
Dim K As Long, D As Long, I As Long

K = 1: D = 0
For I = Len(vData) To 1 Step -1
If Mid(vData, I, 1) = "1" Then D = D + K
K = K * 2
Next I
GetStrValue = Chr(D)
End Function

行云边 2004-09-23
  • 打赏
  • 举报
回复
补充: dim bytRcv() as byte
strRcv是你接收到的字符串
行云边 2004-09-23
  • 打赏
  • 举报
回复
接收数据的时候 就是2进制的啊,如果是你用String来接收 话用 下面方法转化成 byte数组再进行CRC校验
bytRcv=StrConv(strRcv,vbFromUnicode )
shuliangqing 2004-09-23
  • 打赏
  • 举报
回复
楼上的,你的函数不是通用的,我要的是不分类型的,比如你的TEXT1输入一个字母就不对了
laviewpbt 2004-09-23
  • 打赏
  • 举报
回复
Private Function getbinary(number As Integer) As String
Dim binstr As String
binstr = ""
number = number + 1
For x = 7 To 0 Step -1
If number > 2 ^ x Then
number = number - 2 ^ x
binstr = binstr & "1"
Else
binstr = binstr & "0"
End If
Next
getbinary = binstr
End Function
Private Sub Form_Load()
Text1.Text = getbinary(567)
Text2.Text = bintodec(Text1.Text)
End Sub
Private Function bintodec(binstr As String) As Integer
Dim number As Integer
For x = 0 To 7
If Mid(binstr, x + 1, 1) = "1" Then
number = number + 2 ^ (7 - x)
End If
Next
bintodec = number
End Function

ryuginka 2004-09-23
  • 打赏
  • 举报
回复
up
tztz520 2004-09-23
  • 打赏
  • 举报
回复
你可以GetBinary(chr(61))就是二进制的
yijiansong 2004-09-23
  • 打赏
  • 举报
回复
顶!
shuliangqing 2004-09-23
  • 打赏
  • 举报
回复
是这样的,我在作一个通讯程序,我要对接收到的数据作CRC校验,我想把所有收到的数据看作一个二进制序列
zhangzhijian 2004-09-23
  • 打赏
  • 举报
回复
顶你的!
二氧化碳 2004-09-23
  • 打赏
  • 举报
回复
十六进制和二进制有区别马!!!
shuliangqing 2004-09-23
  • 打赏
  • 举报
回复
好像不对,比如说a的ASC码是61,那么它在计算机中的二进制就应该是111101,我就是想要这个二进制值
tztz520 2004-09-23
  • 打赏
  • 举报
回复
Private Sub Command5_Click()
Dim i As Byte
i = 4
MsgBox GetBinary(i)
End Sub


Private Function GetBinary(vData As Variant) As String
Dim MyData As Long
Dim S As String, Y As String
Dim i As Integer

Const Bins = "0000000100100011010001010110011110001001101010111100110111101111"
MyData = AscB(vData)
Y = Hex(MyData)
S = ""
For i = 1 To Len(Y)
S = S + Mid(Bins, (Val("&h" + Mid(Y, i, 1)) * 4 + 1), 4)
Next i
GetBinary = Trim(S) 'Format(s, "0")
End Function

7,765

社区成员

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

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