关于按位异或

xh_mlj 2004-06-08 05:57:45
一组十六进制数,逐字节异或,得出一个字节的校验结果。
例如:00 16 30 30 41 31 30 30 30 30 30 30 30 30 30 31 30 30 03
异或结果应该为:64


我用的VB中的Xor函数,却得不到正确的结果,请大家帮忙!
谢 谢!
...全文
307 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xh_mlj 2004-06-09
  • 打赏
  • 举报
回复
谢谢各位的关注,我又对这个功能整理了一下,写成了函数,大家共享!
也怪我上次没说清楚,在需要的校验的十六进制数中也包括像“A","B"这样的十六进制数,这时候用 danielinbiti(金) 的方法就会出错了,因为字母是不能乘以16的!



Function GetLRC(ByVal strData As String) As String
Dim IntI As Integer
Dim intTempXor As Integer
Dim intTemp As Integer
Dim strTemp As String

strTemp = Replace(strData, " ", "")
'
intTempXor = CInt("&H" & Left(strTemp, 2))


For IntI = 3 To Len(strTemp) Step 2
'
intTemp = CInt("&H" & Mid(strTemp, IntI, 2))

intTempXor = intTempXor Xor intTemp

Next

GetLRC = Hex(intTempXor)

End Function
ryuginka 2004-06-08
  • 打赏
  • 举报
回复
up
Fnems 2004-06-08
  • 打赏
  • 举报
回复

楼上真经典!!
danielinbiti 2004-06-08
  • 打赏
  • 举报
回复
10进制和16进制别搞错了^_^,下面代码你在整理一下吧
Private Sub Command1_Click()
Dim i As Integer
Dim aa
Dim bb As Integer
Dim cc As Integer
Dim dd As Integer
Dim str As String
str = "00 16 30 30 41 31 30 30 30 30 30 30 30 30 30 31 30 30 03"
aa = Split(str, " ")
cc = CInt(Mid((aa(0)), 1, 1)) * 16 + CInt(Mid((aa(0)), 2, 1))
For i = 1 To UBound(aa)
dd = CInt(Mid((aa(i)), 1, 1)) * 16 + CInt(Mid((aa(i)), 2, 1))
cc = cc Xor dd
Next i
Text1.Text = Hex(cc)
End Sub
flyingscv 2004-06-08
  • 打赏
  • 举报
回复
VB中的Xor没有问题

7,763

社区成员

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

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