| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2827 人关注过本帖
标题:winsock通讯 16进制byte 程序问题 数组不能赋值
取消只看楼主 加入收藏
i吉吉
Rank: 1
等 级:新手上路
帖 子:19
专家分:4
注 册:2012-4-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
winsock通讯 16进制byte 程序问题 数组不能赋值
程序代码:
Private Sub form_load()

 If Winsock1.State <> sckClosed Then
Winsock1.Close
End If
Winsock1.RemoteHost = "221.130.45.197"
Winsock1.RemotePort = 1001
Winsock1.Protocol = 0 ' TCP 协议
Winsock1.LocalPort = 0
Winsock1.Connect
End Sub

Private Sub Image1_Click()
Dim nobiao(), cs As Byte
Dim no As String
no = "68999999999999680A06" & "Hex(Text1.Text)"
nobiao = no
Dim i As Integer
For i = 0 To 14
cs = cs + nobiao(i)
Next i
nobiao(15) = Hex(cs)
nobiao(16) = &H16
Winsock1.SendData nobiao
End Sub

Private Sub Image2_Click()
Dim data() As Byte
Call set1_data_analy(data())
Winsock1.SendData data
End Sub

Private Sub set1_data_analy(settime() As Byte)
Dim sum As Integer
Dim dt(0 To 9) As String
sum = 14 + Text2.Text + Text3.Text + Text4.Text + Text5.Text + Text6.Text + Text7.Text
While sum >= 256
sum = sum - 256
Wend
While sum < 16
dt(6) = "0" & "Hex(sum)"
Wend

 dt(0) = "Hex(Text7.Text)"

 dt(1) = "Hex(Text6.Text)"

 dt(2) = "Hex(Text5.Text)"

 dt(3) = "Hex(Text4.Text)"

 dt(4) = "Hex(Text3.Text)"

 dt(5) = "Hex(Text2.Text)"

 dt(6) = "Hex(sum)"
Dim a As String
a = "68999999999999680806" & "dt()" & "16"
settime = a
End Sub
图片附件: 游客没有浏览图片的权限,请 登录注册
帧格式是类似这样的
我越改越晕 越改越报错 不知道怎么改才是对的了 麻烦大神们帮我看一下吧~
目前的报错是nobiao=no 这 报错数组不能赋值
搜索更多相关主题的帖子: 通讯 color 
2012-05-29 00:00
i吉吉
Rank: 1
等 级:新手上路
帖 子:19
专家分:4
注 册:2012-4-20
收藏
得分:0 
回复 2楼 风吹过b
好多错...好晕啊...
数组都不能直接赋值么?可是我查到说“为了简化Byte数组和String字符串之间的数据传递,VB允许你在任何动态Byte数组和任何字符串之间直接互相赋值”...

如果 需要把 6 8 9 9 ... 当成 ASCII 代码直接给 nobiao 的话,可以使用
nobiao  = StrConv( no , vbFromUnicode)
这个函数把 6 翻译成 &H36 也就是 54 放到 nobiao(0) 元素里,
        把 8 翻译成 &H38 也就是 56 放到 nobiao(1) 元素里。
如果不是这样的话,那么你需要自己写翻译函数,然后手动把 数据一个一个的放到 数组的每个元素中去。
或者你按照标准的 桢格式 组合所需要的 ASCII代码,然后再给值。

这一段没怎么看懂 我用的帧格式是 68H 99H...两位数是一个字节啊 怎么变成一个是一个字节了?

a = "68999999999999680806" & "dt()" & "16"
如果改成a = "68999999999999680806" & dt() & "16"是怎样的效果呢?(这个只是单纯问一下 我会用join函数改的..)

2012-05-29 11:31
i吉吉
Rank: 1
等 级:新手上路
帖 子:19
专家分:4
注 册:2012-4-20
收藏
得分:0 
回复 2楼 风吹过b
Dim dta As String
dta = Join(dt, "")
Dim a As String
a = "68999999999999680806" & dta & "16"

这样用对不对?

另外 我程序里写相加功能的 都是想实现 计算出校验码CS CS是从起始帧一直加到CS帧前 然后取后两位放入CS 我的程序自己感觉好像都不太对 能麻烦你也帮我看一下么?
2012-05-29 11:55
i吉吉
Rank: 1
等 级:新手上路
帖 子:19
专家分:4
注 册:2012-4-20
收藏
得分:0 
虽然好多地方还是有点迷迷糊糊的 但是好像基本搞懂了...
我先自己研究下 实在不对再来麻烦你啦 多谢~~
2012-05-30 14:56
i吉吉
Rank: 1
等 级:新手上路
帖 子:19
专家分:4
注 册:2012-4-20
收藏
得分:0 
回复 5楼 风吹过b
程序代码:
Private Sub jiaoyancs(att As String, css As Byte)  '校验和
    Dim i As Long
    Dim l As Long
    Dim checksum As String
    Dim strdata As String, s As String

    checksum = 0

    strdata = Replace(att, " ", "")    '用于将空格去掉
    l = Len(strdata)

    If l Mod 2 <> 0 Then l = l + 1

        For i = 1 To Len(strdata) Step 2
            checksum = checksum + Val("&H" & Mid(strdata, i, 2)) '将16进制字符串转为10进制后相加
        Next i
        s = Right(Hex(checksum), 2)
        css = CByte(s)
End Sub
css=cbyte(s)这提示类型不匹配是怎么回事啊? cbyte不是强制转换为byte类型么 怎么还会出现类型不匹配呢?
2012-05-30 22:41
i吉吉
Rank: 1
等 级:新手上路
帖 子:19
专家分:4
注 册:2012-4-20
收藏
得分:0 
回复 8楼 风吹过b
嗯 明白啦~
多谢~~
2012-05-31 16:36
快速回复:winsock通讯 16进制byte 程序问题 数组不能赋值
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018758 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved