| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5546 人关注过本帖
标题:十六进制数相加
只看楼主 加入收藏
wanwei903
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-4-27
收藏
 问题点数:0 回复次数:10 
十六进制数相加
  请教各位高手,怎么用VB实现16进制数的相加。我用VB做FXPLC的通信,计算LRC校验和时,需要16进制的ASCII码相加,并且需要相加的十六进制数中,有控制字符ETX(其ASCII码为03H),我尝试先把他们的十进制加起来再转换过来,可因为有控制字符,所以结果是错误的。现在不知道该怎么实现?各位高手帮帮忙!非常感谢
搜索更多相关主题的帖子: 十六进制 相加 
2007-05-29 14:55
不惑
Rank: 2
等 级:论坛游民
威 望:2
帖 子:569
专家分:13
注 册:2007-3-22
收藏
得分:0 

十六进制.哈哈,有意思VB没有十六进制转换吗?好象只有转成10进制的.
以前我用笨办法做过任意位数的计算器,办法就是把它以字符形式一位一位地算.(够笨吧?不过无任多少位都是可以算的,只是速度上有些问题,开平方,算了一个多小时才算到小数点的几千位)
我想你也可以用我的笨方法算.
不过,正确的算法应该是以二进制算.这样速度更快(当然你得对二进制熟了).

2007-05-30 08:44
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 

问题是不知道你想怎么加两个数啊,你不说你的两个数是哪几位相加,不相加的几位怎么处理(你所说的验证位)?
你至少也得举个例:哪个两数相加后应该是等于多少啊。


VB QQ群:47715789
2007-05-30 09:58
superguy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-5-17
收藏
得分:0 
能不能举个例子啊,都空说,不好解决问题啊
2007-05-31 12:29
wanwei903
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-4-27
收藏
得分:0 

假如说一串字符:代码为:STX 0 0 F F 0 0 1 1 0 1 1 0 1 ETX 16进制的ASCII码为:02H 30H 30H 46H 46H 30H 30H 31H 31H 30H 31H 31H 30H 31H 03H ,计算其校验和,即将其ASCII码相加,舍去高位,取其低两位,在这里这一串字符的校验和为41H 36H。这是用计算器按出来的,就是不知道用VB怎么编程实现?希望各位帮帮忙!

[此贴子已经被作者于2007-6-2 21:55:40编辑过]

2007-06-02 21:50
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 
你最好是把你用计算器算的步骤写清楚。

VB QQ群:47715789
2007-06-03 01:43
huangwy
Rank: 1
等 级:新手上路
威 望:2
帖 子:297
专家分:0
注 册:2007-3-23
收藏
得分:0 
搞不明白你说什么,怎么“02H 30H 30H 46H 46H 30H 30H 31H 31H 30H 31H 31H 30H 31H 03H ,计算其校验和,即将其ASCII码相加,舍去高位,取其低两位,在这里这一串字符的校验和为41H 36H”怎么计算的??????
2007-06-03 10:45
wanwei903
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-4-27
收藏
得分:0 
首先在计算器上选择16进制,然后将如下的字符串一一加起来, 02 30 30 46 46 30 30 31 31 30 31 31 30 31 03 最后得到2A6,取后两位A和6,分别用其ASCII字符表示即为41和36。各位可以在自己电脑上的计算器算算,就是这样的。求教如何用VB实现啊???
2007-06-04 10:42
風色づ幻想
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-5-25
收藏
得分:0 

随便写个函数把16→10处理
然后用Hex()转回16,返回String
Right(String,2)
分别对2个字符处理转ASC(),转16进制就是结果

我自己都晕晕的

[此贴子已经被作者于2007-6-4 14:09:12编辑过]


2007-06-04 13:57
Joforn
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1242
专家分:122
注 册:2007-1-2
收藏
得分:0 

Option Explicit

Private Sub Form_Load()
Dim STR1 As String, NUM1 As Integer, NUM2 As Integer
STR1 = Chr(2) & "00FF001101101" & Chr(3)
STR2Num STR1, NUM1, NUM2
Debug.Print "NUM1=" & Hex(NUM1) & " NUM2=" & Hex(NUM2)
End Sub

Private Sub STR2Num(ByVal STR1 As String, NUM1 As Integer, NUM2 As Integer)
'这个过程是返回两个十进制数分别放入NUM1、NUM2中
Dim Byte_D() As Byte, I As Long, K As Double
Byte_D = StrConv(STR1, vbFromUnicode)
For I = 0 To UBound(Byte_D)
K = K + Byte_D(I)
Next
STR1 = IIf(K < 16, "0" & Hex(K), Right(Hex(K), 2))
Byte_D = StrConv(STR1, vbFromUnicode)
NUM1 = Byte_D(0)
NUM2 = Byte_D(1)
End Sub


VB QQ群:47715789
2007-06-04 20:25
快速回复:十六进制数相加
数据加载中...
 
   



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

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