各位大侠,来急救啊,在线等啊,最后的分数了

charly_ye 2007-08-10 03:33:38
问题描述:10进制数值518
接收用的 byte数组 data(0)=16进制 02 data(1)=进制 06
和起来就是0206
但是对接收的数据处理的时候,VB默认的把data(1)这样的数值,从unicode转换为了单个byte表示,上面的数值 就变成了 26 ,结果就得到错误数值了

而如果是 02 16 ,VB就识别为unicode,处理就能得到正确结果
各位大侠,这个应该怎么作啊

在下初学VB,各位路过的好人来急救啊
...全文
180 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmyyxx88 2007-08-11
  • 打赏
  • 举报
回复
"下位机发送回来",一般按两种方式。
1、按字节数据发送。如&H175A, 发送两个数为:23、90。我上面的代码就假设为这种发送方式。
2、按字符发送。如&H175A, 发送“1”“7”“5”“A”四个字符。
charly_ye 2007-08-11
  • 打赏
  • 举报
回复
看来我没有把题意讲清楚啊,我做串口通信,下位机发送回来的是16进制的数值,
是从16进制 转换为10进制
你的代码,还是很有参考价值的,我会试试看先
charly_ye 2007-08-11
  • 打赏
  • 举报
回复
恩,这位大侠的方法,的确可以,
在下先谢过了,等程序做完,交货,请你喝茶
mmyyxx88 2007-08-10
  • 打赏
  • 举报
回复
你接收到的本来就是十进制数,何苦再转换成16进制,然后又再转换为10进制.
按我理解你的题意,写了一段代码.
Function Data1andData2(data1 As Byte, data2 As Byte) As Long
Dim tmp As Long
tmp = 256
tmp = tmp * data1 + data2
If tmp > 32768 Then tmp = tmp - 65536
Data1andData2 = tmp
End Function

'再写一段测试程序
Private Sub Command1_Click()
Dim data(2) As Byte
Dim tmp As Long

'测试组一
data(0) = 2
data(1) = 6
tmp = Data1andData2(data(0), data(1))
Debug.Print "data(0)=2, data(1)=6 时 "; tmp

'测试组二
data(0) = &H2
data(1) = &H6
tmp = Data1andData2(data(0), data(1))
Debug.Print "data(0)=&H2, data(1)=&H6 时 "; tmp

'测试组三
data(0) = &HFF
data(1) = &HEA
tmp = Data1andData2(data(0), data(1))
Debug.Print "data(0)=&HFF, data(1)=&HEA 时 "; tmp

'测试组三
data(0) = 208
data(1) = 186
tmp = Data1andData2(data(0), data(1))
Debug.Print "data(0)=208, data(1)=186 时 "; tmp

End Sub


运行结果:
data(0)=2, data(1)=6 时 518
data(0)=&H2, data(1)=&H6 时 518
data(0)=&HFF, data(1)=&HEA 时 -22
data(0)=208, data(1)=186 时 -12102
charly_ye 2007-08-10
  • 打赏
  • 举报
回复
dim data() as byte

data(0)=&HFF
data(1)=&HEA

dim temp as string
temp = hex(data(0))+hex(data(1))

text1.text = hex_to_dec(temp)

我的程序基本是上面这样写的,
然后就是不要像 02 06 这样的2个数值,都能正确处理,比如像02 16,VB就能识别为2个byte的unicode,
charly_ye 2007-08-10
  • 打赏
  • 举报
回复
这位大侠提供的,的确可以解决我这里提出来的问题,
但是我整个程序里面是把两个数组位置 里面的16进制代码 合并到一起 然后用hex_to_dec()就是16进制转10进制的函数来得到10进制数
比如 data(0)=&HFF data(1)=&HEA hex_to_dec(FFEA) 就得到 65514 就是65536 -22
用来表示 -22
如果用大侠的这种方法,好像还不能满足我的需要,
我想要的效果: data(0)=&h02 data(1)=&h06
然后 dim data2 as string
data2 = 206
然后 value=hex_to_dec(data2)
现在的问题就是怎么把data数组的2位,正确的合并到data2 这个字符串中


charly_ye 2007-08-10
  • 打赏
  • 举报
回复
好像可以,需要 try 一下
benyfeifei 2007-08-10
  • 打赏
  • 举报
回复
楼上正解。

组合后直接显示,不用考虑Unicode的问题。
charly_ye 2007-08-10
  • 打赏
  • 举报
回复
是的,接收需要整合为一个整数,然后再转换为10进制显示
mmyyxx88 2007-08-10
  • 打赏
  • 举报
回复
接收用的 byte数组
而发送是16位的数据,把高8位和低8位进行分离后发送。
你收到的是分离数据后,应该再对数据加以处理,如收到2、6两个数,那么它的结果应该是2*256+6=512+6=518, 也就是16进制表示的0206H
benyfeifei 2007-08-10
  • 打赏
  • 举报
回复
没看懂你的问题。

你是不是想在接收程序里将两个字节(比如 &H02,&H06)组合成一个整数啊?!
内容概要:本文提出了一种基于蒙特卡洛模拟与拉格朗日松弛法的分散式优化策略,用于解决电动汽车充电站在分时电价机制下的有序充电调度问题。通过蒙特卡洛方法模拟电动汽车充电行为的随机性,生成多样化负荷场景,构建以降低电网负荷波动和用户充电成本为目标的优化模型;采用拉格朗日松弛法对耦合约束进行解耦,实现分布式求解,在保障用户隐私的同时提升计算效率。文中设计了详细的仿真场景,系统分析了该调度策略对电网负荷特性和用户经济性的影响,验证了所提方法在实际应用中的有效性与可行性。; 适合人群:具备电力系统运行、优化算法理论及Matlab编程能力的研究生、科研人员以及从事智能电网与电动汽车相关领域的工程技术人员。; 使用场景及目标:①应用于城市规模化充电站集群的有序充电管理,实现电网“削峰填谷”;②为电力公司制定科学合理的分时电价政策提供量化分析工具;③支撑智能电网中需求侧资源的分布式协同优化调度研究与系统设计。; 阅读建议:建议结合提供的Matlab代码深入理解算法实现流程,重点掌握蒙特卡洛场景生成机制与拉格朗日松弛迭代求解过程,可通过调整参数设置复现不同工况下的仿真结果,以深化对分散式优化机制与调度效果之间关系的理解。
内容概要:本文研究了基于元胞神经网络配流与DQN强化学习的公交线网扰动韧性恢复方法,旨在应对公共交通系统中突发事件导致的网络扰动问题。通过结合元胞神经网络对交通流量进行精细化建模与分配,并利用深度Q网络(DQN)强化学习算法动态优化调度策略,实现公交线路在扰动后的快速恢复与运力再分配。研究构建了完整的仿真框架,在Matlab平台上实现了算法的编码与测试,验证了所提方法在提升公交系统韧性、减少乘客延误和优化资源利用方面的有效性。; 适合人群:具备一定交通工程、智能算法或强化学习基础,从事智慧交通、城市公交调度、韧性城市等方向研究的研究生、科研人员及工程技术开发者。; 使用场景及目标:①应用于城市公交系统在遭遇突发事件(如道路封闭、车辆故障、极端天气)时的应急调度与恢复决策;②为智能交通系统(ITS)提供基于AI的动态配流与优化控制方案;③推动强化学习在复杂交通网络管理中的落地实践; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注元胞神经网络的状态转移机制与DQN奖励函数的设计逻辑,并可通过调整扰动场景参数进行仿真实验,以掌握模型的适应性与优化潜力。

7,788

社区成员

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

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