关于Hex函数.

csersoft 2011-11-09 08:57:39
用Hex函数时,比如shu(0)=&H0
Hex(shu(0))就是0
怎么样让他变成00?
使用这个方法把Byte数组转换成16进制字串符时,只要是0打头的全省略的.
0E就成E了.怎么弄啊?
Function BinArrayToHex(Bin() As Byte) As String
Dim iLoop As Integer
Dim sResult As String
sResult = " "
For iLoop = LBound(Bin) To UBound(Bin)
sResult = sResult + Right("0 " & Hex(Bin(iLoop)), 2) & " "
Next iLoop
BinArrayToHex = Trim(sResult)
End Function
...全文
285 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
现在还是人类 2011-11-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 worldy 的回复:]
format(hex(5),"00")
[/Quote]
你这方法不行,你可以试试看把 5 换成 11
chinaboyzyq 2011-11-10
  • 打赏
  • 举报
回复
right("0" & Hex(shu(0)),2)
帮帮你我她 2011-11-10
  • 打赏
  • 举报
回复
除开你自己的补零取长度法,下面只是给你提供三种方法,都可用自己参考下。
效率都差不多。

Dim j As Long = 0
Dim tempstr As New System.Text.StringBuilder '此法拼接字符串,效率很高
Dim temps As String = ""
For j = qd To qd + bytes - 1
temps = Hex(outBytes(j))
If Len(temps) = 1 Then
tempstr.Append("0" & temps & Space(1))
Else
tempstr.Append(temps & Space(1))
End If
' tempstr.Append(outBytes(j).ToString("X2") & Space(1)) '等价的均可用--方法2
' tempstr.Append([String].Format("{0:X2} ", outBytes(j))) '等价的均可用--方法3
System.Windows.Forms.Application.DoEvents() '释放控制权给程序的其他
Next
viewmsg.AppendText(tempstr.ToString)
zdingyun 2011-11-10
  • 打赏
  • 举报
回复
Function BinArrayToHex(Bin() As Byte) As String
Dim iLoop As Integer
Dim sResult As String
sResult = " "
For iLoop = LBound(Bin) To UBound(Bin)
sResult = sResult + Right("0" & Hex(Bin(iLoop)), 2) & " "
Next iLoop
BinArrayToHex = sResult
End Function
KiteGirl 2011-11-10
  • 打赏
  • 举报
回复
最后还是来个神智正常点的写法吧:乖孩子一般是这样写的。

Dim tByte As Long
Dim tHEX As String
For tByte = 0 To 255
tHEX = Hex(tByte)
If Len(tHEX) < 2 Then tHEX = "0" & tHEX
Debug.Print tHEX & " ";
Next
KiteGirl 2011-11-10
  • 打赏
  • 举报
回复
VB下做你需要的这种函数要比你想象中容易的多。HEX不是那么好用的。


'第一种用法
'输出Ascii编码的HEX串(可直接存盘的,显示需要StrConv转换)
Text2.Text = StrConv(BytesHEX(tBytes()), vbUnicode)
'第二种用法
'输出Unicode编码的HEX串(在VB下直接可显示的)
'函数输出的是Byte数组,但这里却赋给了字符串。
'因为:VB下的Byte数组和字符串之间是可以互相赋值的。
Text3.Text = BytesHEX(tBytes(), , True)

Function BytesHEX(ByRef pBytes() As Byte, Optional ByVal pLimit As Byte = &H20, Optional ByVal pUnicode As Boolean = False) As Byte()
Dim tSurBytes_Index As Long
Dim tDesBytes() As Byte, tDesBytes_Index As Long, tDesBytes_Length As Long

tDesBytes_Length = UBound(pBytes()) * 3 * ((pUnicode And 1) + 1) + 2 + (pUnicode And 3)

ReDim tDesBytes(tDesBytes_Length)

For tDesBytes_Index = 0 To tDesBytes_Length Step (3 + (pUnicode And 3))
tDesBytes(tDesBytes_Index) = HexEnCode(pBytes(tSurBytes_Index) \ 16)
tDesBytes(tDesBytes_Index + 1 + (pUnicode And 1)) = HexEnCode(pBytes(tSurBytes_Index) Mod 16)
tDesBytes(tDesBytes_Index + 2 + (pUnicode And 2)) = pLimit
tSurBytes_Index = tSurBytes_Index + 1
Next

BytesHEX = tDesBytes()
End Function

Function HexEnCode(pHEX As Byte) As Byte
'根据0~15的Byte数值输出0~F的Ascii码
'这行函数的意思是:HexEnCode = 48 + pHEX;如果pHEX>9,那么HexEnCode再加7。
HexEnCode = 48 + pHEX + ((pHEX > 9) And 7)
End Function
lliai 2011-11-10
  • 打赏
  • 举报
回复
仔细。。。。
chinaboyzyq 2011-11-10
  • 打赏
  • 举报
回复
sResult = sResult + Right("0 " & Hex(Bin(iLoop)), 2) & " "
sResult = sResult + Right("0" & Hex(Bin(iLoop)), 2) & " "
你的程序多了个空格,所以就错了。
KiteGirl 2011-11-10
  • 打赏
  • 举报
回复
如果实在是吃饱了撑的没事干,还可以这样写……


Dim tByte As Long
For tByte = 0 To 255
Debug.Print Replace(Mid(String(16, "0") & String(240, "G"), tByte + 1, 1) & Hex(tByte), "G", "") & " ";
Next



Dim tByte As Long
For tByte = 0 To 255
Debug.Print Replace(Replace("汤姆杰瑞", "杰瑞", Hex(tByte Mod 16)), "汤姆", Hex(tByte \ 16)) & " ";
Next

KiteGirl 2011-11-10
  • 打赏
  • 举报
回复
还有这种方法,虽然笨点,但也解决问题……

Dim tByte As Long
Dim tHEXs() As String
tHEXs() = Split("00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF", " ")
For tByte = 0 To 255
Debug.Print tHEXs(tByte) & " ";
Next
KiteGirl 2011-11-10
  • 打赏
  • 举报
回复
如果你一定要用HEX,这样也不是不可以……

Dim tByte As Long
For tByte = 0 To 255
Debug.Print String((tByte < 16) And 1, "0") & Hex(tByte) & " ";
Next
赵4老师 2011-11-10
  • 打赏
  • 举报
回复
right("0"+hex(10),2)
KiteGirl 2011-11-10
  • 打赏
  • 举报
回复
再给你一个把Byte转换成2位HEX字符串的函数。


Function ByteHEX(ByRef pByte As Byte) As String
Dim tHEX(3) As Byte
tHEX(1) = pByte \ 16: tHEX(3) = pByte Mod 16
tHEX(0) = 48 + tHEX(1) + ((tHEX(1) > 9) And 7)
tHEX(2) = 48 + tHEX(3) + ((tHEX(3) > 9) And 7)
tHEX(1) = 0: tHEX(3) = 0
ByteHEX = tHEX()
End Function
worldy 2011-11-09
  • 打赏
  • 举报
回复
format(hex(5),"00")
现在还是人类 2011-11-09
  • 打赏
  • 举报
回复
Dim A As Long
Dim strTemp As String
A=5
strTemp = Hex(A)
strTemp = String(2-Len(strTemp),"0") & strTemp
Msgbox strTemp

7,762

社区成员

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

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