VB 字符串 转为十六进制转字符串

从电工到工程师.......................
级别: 略有小成
发帖数量: 138 个
工控威望: 242 点
下载积分: 699 分
在线时间: 40(小时)
注册时间: 最后登录:
比如如何用程序验证 将十六进制的16F8 转换成ASC码 31 36 46 38
富士低压,POD(觸摸屏),PLC专卖
级别: VIP会员
工控威望: 18893 点
下载积分: 62299 分
在线时间: 7517(小时)
注册时间: 最后登录:
首先,你要使用与指令来讲每一个16进制字符提取出来。其次,你要使用ASC函数将其转化为ASC码。以上~~下次自动登录
现在的位置:
& 综合 & 正文
VB,hex,bin,str,dec等数值和字符转换函数,UNICODE等转换函数
Option Explicit
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
'Private Declare Function BitAnd Lib "MyVCdll.dll" _
(ByVal nFirstNum As Long, _
ByVal nSecondNum As Long) As Long
'Private Declare Function BitLeftShift Lib "MyVCdll.dll" _
(ByVal nFirstNum As Long, _
ByVal nSecondNum As Integer) As Long
'Private Declare Function BitRightShift Lib "MyVCdll.dll" _
(ByVal nFirstNum As Long, _
ByVal nSecondNum As Integer) As Long
'Public Function vbBitAnd(ByVal nFirstNum As Long, ByVal nSecondNum As Long) As Long
vbBitAnd = BitAnd(nFirstNum, nSecondNum)
'End Function
'Public Function vbBitLeftShift(ByVal nFirstNum As Long, ByVal nSecondNum As Integer) As Long
vbBitLeftShift = BitLeftShift(nFirstNum, nSecondNum)
'End Function
'Public Function vbBitRightShift(ByVal nFirstNum As Long, ByVal nSecondNum As Integer) As Long
vbBitRightShift = BitRightShift(nFirstNum, nSecondNum)
'End Function
''7-bit解码
''strInput: 源编码串
''返回: 目标字符串
'Public Function Decode7BitASC(ByVal strInput As String) As String
As Integer
Dim iSrc()
As Integer
Dim iDst()
As Integer
Dim idxSrc
'源字符串的计数值
Dim idxDst
'目标解码串的计数值
Dim idxByte
'当前正在处理的组内字节的序号,范围是0-6
'上一字节残余的数据
Dim blReturn
As Boolean
Dim strMyString()
Dim strOutput
On Error Resume Next
blReturn = String2Array(strInput, " ", nD, strMyString(), True)
ReDim iSrc(0 To nD)
ReDim iDst(0 To nD * 2)
For idxSrc = 0 To nD - 1
iSrc(idxSrc) = Hex2Dec(strMyString(idxSrc))
Next idxSrc
'计数值初始化
idxSrc = 0
idxDst = 0
'组内字节序号和残余数据初始化
idxByte = 0
'将源数据每7个字节分为一组,解压缩成8个字节
'循环该处理过程,直至源数据被处理完
'如果分组不到7字节,也能正确处理
While idxSrc
iArrayRtn(idxDst) = iTmp
'修改目标串的指针和计数值 idxDst++;
idxDst = idxDst + 1
'将该字节剩下的左边部分,作为残余数据保存起来
iLeft = BitRightShift(iSrc(idxSrc), idxChar)
Next idxSrc
Dim nTmp As Long
Dim strTmp As String
Encode7BitASC = ""
For nTmp = 0 To idxDst
strTmp = Hex(iArrayRtn(nTmp))
If Len(strTmp)
" " Then strTmpB = strTmpB & strTmpA
j = Len(strTmpB)
strTmp = ""
For i = 1 To j Step 2
strTmpA = Mid(strTmpB, i, 2)
Debug.Print strTmpA
'strTmp = strTmp & ChrB(Hex2Dec(strTmpA))
strTmp = strTmp & Chr(Hex2Dec(strTmpA))
Ascii2Char = strTmp
End Function
'Print Char2Ascii("a2B3")
Public Function Char2Ascii(ByVal strChar As String) As String
Dim iAsc As Integer
Dim strTmp
Dim strTmp1 As String
Dim strTmp2 As String
On Error Resume Next
n1 = LenB(strChar)
strTmp = ""
For n2 = 1 To n1
iAsc = AscB(MidB(strChar, n2, 1))
strTmp1 = Hex(iAsc)
If Len(strTmp1)
iLen = Len(strInput)
For i = 1 To iLen
iTmp = Asc(Mid(strInput, i, 1))
If iTmp &= 48 And iTmp = 65 And iTmp = 97 And iTmp
122 Or iAsc
aryTr(nUBound) = strChar
nUBound = nUBound + 1
ReDim Preserve aryTr(1 To nUBound)
strChar = ""
If i = Len(YourStr) Then
strChar = Mid(YourStr, i - j + 1, j)
aryTr(nUBound) = strChar
nD = nUBound
ReDim MyStr(0 To nUBound - 1)
For i = 1 To nUBound
MyStr(i - 1) = aryTr(i)
String2Array = True
For i = 1 To Len(YourStr)
strTmp = Mid(YourStr, i, 1)
If strTmp = charRef Then
strChar = Mid(YourStr, i - j, j)
If strChar
aryTr(nUBound) = strChar
nUBound = nUBound + 1
ReDim Preserve aryTr(1 To nUBound)
strChar = ""
If i = Len(YourStr) Then
strChar = Mid(YourStr, i - j + 1, j)
aryTr(nUBound) = strChar
nD = nUBound
ReDim MyStr(0 To nUBound - 1)
For i = 1 To nUBound
MyStr(i - 1) = aryTr(i)
String2Array = True
Exit Function
ErrorDecode:
MsgBox Err.Number & ":" & Err.Description
String2Array = False
End Function
Public Sub QuickSort(InputArray() As Double, LowPos As Integer, HighPos As Integer)
Dim iPivot As Integer
If LowPos = dblPivot)
'--- 从右向左扫描,查找第1个小于Pivot的记录R(iE) ---
iE = iE - 1
'----- 表示找到的R(iE)
Pivot -----
b = String(ExtraDigitsNeeded, "0") & b
Hex2BinA = b
End Function
'///////////////////////////////////////////////////////////
'二进制字符串转化为十进制字符串
'///////////////////////////////////////////////////////////
Public Function Bin2Dec(str_input As String) As String
Dim tempBtoD As Long
Dim i As Integer
For i = 1 To Len(str_input)
tempBtoD = Val(Mid(str_input, i, 1)) * 2 ^ (Len(str_input) - i) + tempBtoD
BtoD = Format(tempBtoD, "0")
End Function
'////////////////////////////////////////
'两字符十六进制数转化为十进制数
'////////////////////////////////////////
Public Function Hex2Dec_2byte(ByVal in_Hex As String) As Double
If Len(in_Hex) = 4 Then Hex2Dec_2byte = Val(Hex2Dec_1byte(Mid(in_Hex, 1, 2))) * 256 + Val(Hex2Dec_1byte(Mid(in_Hex, 3, 2)))
If Len(in_Hex) = 2 Then Hex2Dec_2byte = Val(Hex2Dec_1byte(Mid(in_Hex, 1, 2)))
End Function
'/////////////////////////////////////////////////////////
'单字符型十六进制数转化为十进制数
'/////////////////////////////////////////////////////////
Public Function Hex2Dec_1byte(in_Hex As String) As String
Dim dec_temp As Integer
Dim n As Integer
Dim Temp As Integer
Dim Temp1 As String
Do While n
Bininary_in = String(4 - Len(Bininary_in) Mod 4, "0") & Bininary_in
For i = 1 To Len(Bininary_in) Step 4
Select Case Mid(Bininary_in, i, 4)
Case "0000": H = H & "0"
Case "0001": H = H & "1"
Case "0010": H = H & "2"
Case "0011": H = H & "3"
Case "0100": H = H & "4"
Case "0101": H = H & "5"
Case "0110": H = H & "6"
Case "0111": H = H & "7"
Case "1000": H = H & "8"
Case "1001": H = H & "9"
Case "1010": H = H & "A"
Case "1011": H = H & "B"
Case "1100": H = H & "C"
Case "1101": H = H & "D"
Case "1110": H = H & "E"
Case "1111": H = H & "F"
End Select
Bin2Hex = H
End Function
Public Function HexStr2Int(ByVal arg0 As String) As Integer
HexStr2Int = Hex2Dec_2byte(arg0)
End Function
'把整数转换成HEX STR
Public Function Int2HexStr(ByVal arg0 As Integer) As String
Dim strChar As String
strChar = ""
strChar = Hex(arg0)
If Len(strChar) Mod 2 = 1 Then strChar = "0" & strChar
Int2HexStr = strChar
End Function
&&&&推荐文章:
【上篇】【下篇】您现在所在的是:
单片机论坛
→ 浏览主题:
* 帖子主题:
文章数:13
年度积分:50
历史总积分:592
注册时间:
我应该把inputmode 设置成text还是binary
比如
&buf= mscomm1.input
那么buf里到底读来的是什么
用text1.text=buf
为什么用binary时读总是乱码
如果让他显示出从单片机送出的16进制该怎么办
比如 在单片机中 发送 mov a,#afh
mov sbuf,a
要显示出来 是af字符该怎么办
谢谢 &了
[此贴子已经被思南于 17:23:19编辑过]
Guan_Qing_Xin
文章数:175
年度积分:50
历史总积分:823
注册时间:
用VAL函数啊。
Val(string) &‘返回包含于字符串内的数字,字符串中是一个适当类型的数值。
如果确认string是一个十六进制数字字符,则明确告诉VAL函数:
Dim n As Long
n = VAl("&H" & String)
文章数:13
年度积分:50
历史总积分:592
注册时间:
这位大虾
我的意思是用vb来接受显示单片机送来的16进制字符
比如
单片机发送
aa11abbb & aabb是开始和结束信号
那如何在vb中能显示
aa11abbb
我设置
rthreshold是 8
Private Sub comm1_OnComm()
Dim buf1 As Variant
Dim buf$, i%
Select mEvent
Case comEvReceive
inbyte = comm1.Input
For i = 0 To 7
buf = Hex(inbyte(i))
buf1 = buf1 & buf
Next
Text2.Text = n
comm1.InBufferCount = 0
End Select
End Sub
现在我把rxd和txd短结
用output命令发送
为什么在text2中显示不出来
text2.text=buf1
Guan_Qing_Xin
文章数:175
年度积分:50
历史总积分:823
注册时间:
未知"Text2.Text = n" 中的 n 是什么。
其实把 rthreshold置为1(每字符处理一次)则可处理任意长度的字串:
Private Sub comm1_OnComm()
Dim s$,s1$
Select mEvent
&Case comEvReceive
& & &s = comm1.Input
& & '例: 每一字符都更新一次text2.text
& & & & &text2.text = text2.text & s
& & '或: 如果"bb" 是通讯协议中固定用的的结束符,则可在收到等它出现时再更新text2.text
& & & & s1 = s1 & s
& & & & If Len(s1) & 2 Then
& & & & & &Iif Right(s1) = "bb" then
& & & & & & & &text2.text = s1
& & & & & & & &'建立本串接收结束标志,通知可继续发送等
& & & & & & & &......
& & & & & & End If
& & & & End If
End Select
文章数:13
年度积分:50
历史总积分:592
注册时间:
多谢了
现在的问题是把从单片机的16进制 在text中显示出来
比如
单片机发送ab16进制字符
能把他在vb上显示出来
用n = VAl("&H" & String)
是什么意思
vb中往单片机里送的是asc码
作为控制字
那单片机接受到的是什么呢
Guan_Qing_Xin
文章数:175
年度积分:50
历史总积分:823
注册时间:
搞清楚用ASCII码表示一个数和用字符串(由"0"-"F"字符组成)表示十六进制数两种不同概念:
前一种是机器码,它用一个码就可表示0-255: &171 = ABh = chr(&HAB)
后一种是用字符串String表示数字,它用两字符表示0-255: 171 = ABh = Val("&h" & "ab")
字符串的内容被包含在两引号中.任一字符的的ASCII码可用Asc()函数返回,如:
n = Asc(Mid("1234AB",5,1) & 返回 字串中第5个字符"A"的ASCII码值: n = 41h = 65
不知你的单片机用的是那种?
文章数:13
年度积分:50
历史总积分:592
注册时间:
多谢指教
请问
往单片机送命令ff时
用output命令时
单片机能收到的是什么呢
是16进制的 ff 吗
[此贴子已经被作者于 12:01:35编辑过]
文章数:13
年度积分:50
历史总积分:592
注册时间:
我用的是2051单片机
我不想把16进制的 ab转换为171
我只想被他在text中显示出ab
是不是我要把单字节变成双字节才能显示出来
Guan_Qing_Xin
文章数:175
年度积分:50
历史总积分:823
注册时间:
机器码顾名思义只在机器运算中使用,查ASCII字符表时,你能在字符中理解它所代表的全部码值吗,有的码值根本就不能显示和打印,如chr(0),chr(32),chr(255).....在文本框显示的都是空格,无法分辨,这就是为什么要用两个十六进制字符来表示一个字节的值的原因了。
要将某一个字节的码值以两个十六进制字符表示出来(设Char是待转换的字节):
Text2.text = Right("0" & &Hex(Asc(Char)), 2)
转换流程为:查十进制码值 -& 十六进制转换 -& 双字符定位。
式中用Right()函数是为了保证少于16的码值也用两个字符表示,如:“00”,“0A”....等。
Guan_Qing_Xin
文章数:175
年度积分:50
历史总积分:823
注册时间:
to ppboy:
一个学习方法:用一个十六进制文件编辑器如UltraEdit-32,新建一个文件并用它编辑,学习领会一下。祝你成功!
工控学堂推荐视频:十六进制转字符串,该如何处理
十六进制转字符串,该如何处理
linlinn & &
发布时间: & &
浏览:2 & &
回复:1 & &
悬赏:0.0希赛币
十六进制转字符串
Data="41-42-43-44-45"
每個byte之間有一個"-",我想省略調他
然後將&data&轉成&字符串&ABCDE
可以提供源碼嗎 謝謝~
Data="41-42-43-44-45"
S&=&string.Join("",&Split(Data,&"-").Select(Function(x)&Chr(Val(x))).ToArray())songyong & &
12:43:12 & &
& & (0)(0)引用
本问题标题:
本问题地址:
温馨提示:本问答中心的任何言论仅代表发言者个人的观点,与希赛网立场无关。请对您的言论负责,遵守中华人民共和国有关法律、法规。如果您的言论违反希赛网问答中心的规则,将会被删除。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&查看: 3854|回复: 8
【VB】十进制转十六进制,十六进制转浮点数,小写字母转大写字母
阅读权限150
在线时间 小时
十六进制数 = Hex(&十进制数&)
& &十到十六 就这一条代码
Text5.Text = Hex(Text7.Text)
---------------------------------------------------------------------------------------------
Dim k As Integer
Dim i As Integer
Dim j As Integer
Dim S As Integer
Dim SS As Integer
Dim E As Integer
Dim M As Long
Dim d As Double
Dim N As Integer
Dim h As Integer
Dim L As Integer
Dim buff(7) As Byte& & '接收到的数据
buff(0) = Asc(&十六进制数第一位&)
buff(1) = Asc(&十六进制数第二位&)
buff(2) = Asc(&十六进制数第三位&)
buff(3) = Asc(&十六进制数第四位&)
buff(4) = Asc(&十六进制数第五位&)
buff(5) = Asc(&十六进制数第六位&)
buff(6) = Asc(&十六进制数第七位&)
buff(7) = Asc(&十六进制数第八位&)
Dim A(15) As Byte
For i = 0 To 15
& &A(i) = i
Dim b(7) As Byte& && && &'存放十进制的数
For j = 0 To 7
&&If buff(j) &= 48 And buff(j) &= 57 Then
& && &&&k = buff(j) - 48
& && &&&b(j) = A(k)
& &&&ElseIf buff(j) &= 65 And buff(j) &= 70 Then
& && && & k = buff(j) - 65
& && && & b(j) = A(k + 10)
& && && & Exit Sub
Dim c(3) As Long
For N = 0 To 6 Step 2& && && && &'八字节转换成四字节
& && &&&c(N / 2) = ((b(N) And &H7F) * (2 ^ 4)) Or (b(N + 1) And &H7F)
'浮点数运算
& && && & S = c(0) \ 2 ^ 7
& && && & If S = 1 Then
& && && && &&&SS = -1
& && && & Else
& && && && &&&SS = 1
& && && & End If
& && && & E = ((c(0) And &H7F) * 2) Or ((c(1) And &H80) \ 2 ^ 7)
& && && & M = ((c(1) And &HFFFFFF) * 2 ^ 16 And &H7FFFFF) Or ((c(2) And &HFFFFFF) * 2 ^ 8) Or ((c(3) And &HFFFFFF))
& && && & d = SS * 2 ^ (E - 127) * (M / (2 ^ 23) + 1)
& && &Text1.Text = d
& && &Text2.Text = SS
& && &Text3.Text = E
& && &Text4.Text = M
& &上面是固定的十六
& & 修改一点点 可以自行输入转换
buff(0) = Asc(Mid(Text6.Text, 1, 1))
buff(1) = Asc(Mid(Text6.Text, 2, 1))
buff(2) = Asc(Mid(Text6.Text, 3, 1))
buff(3) = Asc(Mid(Text6.Text, 4, 1))
buff(4) = Asc(Mid(Text6.Text, 5, 1))
buff(5) = Asc(Mid(Text6.Text, 6, 1))
buff(6) = Asc(Mid(Text6.Text, 7, 1))
buff(7) = Asc(Mid(Text6.Text, 8, 1))
& & 十六进制数一定要是八位的&&多了少了都不行
--------------------------------------------------------------------------------
Dim X As String
Dim i As Long
Dim S As String
Dim CH As String
X = Text5.Text
For i = 1 To Len(X)
CH = Mid(X, i, 1)
If CH &= &a & And CH &= &z& Then
S = S + UCase(CH)
ElseIf CH &= &A& And CH &= &Z& Then
S = S + UCase(CH)
ElseIf CH &= &0& And CH &= &9& Then
S = S + UCase(CH)
Text6.Text = S
原创作品,加分鼓励!
阅读权限150
在线时间 小时
懂的请无视掉& &不懂的请点右上角的叉叉
阅读权限80
在线时间 小时
不懂的人路过,顺便膜拜一下
阅读权限55
在线时间 小时
阅读权限99
在线时间 小时
VB果然比E难
阅读权限60
在线时间 小时
我认为77楼说的很有道理...
阅读权限80
在线时间 小时
不懂诶~~~~
阅读权限30
在线时间 小时
爱情就像两个拉着橡皮筋的人,受伤的总是不愿意放手的那一个!
阅读权限30
在线时间 小时
十六进制转十进制,一个比较简单的方法:MsgBox Val(&&H& & &64&)复制代码转换成大写的内置函数:UCase(string),必要的 string 参数为任何有效的字符串表达式。
转换成小写的内置函数:UCase(string),必要的 string 参数为任何有效的字符串表达式。
UCase 函数示例
本示例使用 UCase 函数来将某字符串转成全部大写。
Dim LowerCase, UpperCase
LowerCase = &Hello World 1234&& &' 要输送的字符串。
UpperCase = UCase(LowerCase)& &' 返回 &HELLO WORLD 1234&。(注:来源于VB6.0帮助文档)
VB] vb浮点数、双精度浮点数与十六进制的相互转化:(挺好的,简单易懂)
'API定义
Public Declare Sub CopyMemory Lib &kernel32& Alias &RtlMoveMemory& (Destination As Any, Source As Any, ByVal Length As Long)
,浮点数转十六进制数
===================================================
Dim a As Single
Dim b As Long
a = Val(Text1.Text)
CopyMemory b, a, 4
Text2.Text = Hex(b)
===================================================
,十六进制数转浮点数
===================================================
Dim a As Long
Dim b As Single
Dim Hexnum As String
Hexnum = Right(&& & Text1.Text, 8)
a = CLng(&&H& & Hexnum)
CopyMemory b, a, 4
Text2.Text = b
===================================================
,双精度浮点数转十六进制数
===================================================
Dim b(1) As Long
Dim a As Double
a = Val(Text1.Text)
CopyMemory b(0), a, 8
Text2.Text = Hex(b(0)) & Hex(b(1))
===================================================
,十六进制数转双精度浮点数
===================================================
Dim b(1) As Long
Dim a As Double
Dim Hexnum As String
Hexnum = Right(&0000& & Text1.Text, 16)
b(1) = CLng(&&H& & Right(Hexnum, 8))
b(0) = CLng(&&H& & Left(Hexnum, 8))
CopyMemory a, b(0), 8
Text2.Text = a
===================================================复制代码
_16-50-03.jpg (24.2 KB, 下载次数: 1)
16:50 上传
这个是我以前自己写的,功能差不多。还是觉得他(),这个代码简单一点。呵呵!!
Powered by

我要回帖

更多关于 十六进制转换字符串 的文章

 

随机推荐