| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3726 人关注过本帖
标题:显示十六进制数的问题!
只看楼主 加入收藏
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
结帖率:66.67%
收藏
 问题点数:0 回复次数:9 
显示十六进制数的问题!
我想把一个长整形变量表示为十六进制数 并且格式为 00 00 00 00 这样

strCardData = Format(Hex(TempCardNum), "00 00 00 00 ")

我这样写的话 ,0到9都没有问题

但是到10的时候就不对了

本来应该显示00 00 00 0A的 但是实际只显示A

谁能告诉我应该怎么做?
搜索更多相关主题的帖子: 十六进制 
2009-09-20 13:52
zhuyongxing
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:234
专家分:482
注 册:2009-8-5
收藏
得分:0 
Private Sub Command1_Click()
tempcardnum = Text1.Text
s = Hex(tempcardnum)
If Len(s) = 8 Then Text2.Text = Mid(s, 1, 2) + " " + Mid(s, 3, 2) + " " + Mid(s, 5, 2) + " " + Mid(s, 7, 2)
If Len(s) = 7 Then Text2.Text = "0" + Mid(s, 1, 1) + " " + Mid(s, 2, 2) + " " + Mid(s, 4, 2) + " " + Mid(s, 6, 2)
If Len(s) = 6 Then Text2.Text = "00" + " " + Mid(s, 1, 2) + " " + Mid(s, 3, 2) + " " + Mid(s, 5, 2)
If Len(s) = 5 Then Text2.Text = "00" + " " + "0" + Mid(s, 1, 1) + " " + Mid(s, 2, 2) + " " + Mid(s, 4, 2)
If Len(s) = 4 Then Text2.Text = "00" + " " + "00" + " " + Mid(s, 1, 2) + " " + Mid(s, 3, 2)
If Len(s) = 3 Then Text2.Text = "00" + " " + "00" + " " + "0" + Mid(s, 1, 1) + " " + Mid(s, 2, 2)
If Len(s) = 2 Then Text2.Text = "00" + " " + "00" + " " + "00" + " " + s
If Len(s) = 1 Then Text2.Text = "00" + " " + "00" + " " + "00" + " " + "0" + s
End Sub
溢出你自己设置吧。过程有点乱
画两个textbox 还有一个button text1 输入 text2  显示
QQ 308749442
2009-09-20 16:10
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:0 
example_GZip.zip (27.91 KB)
Right(Format$(Hex(buff(i)), "!0&&"), 2)
2009-09-20 19:33
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 

自己写的:
Private Sub Command1_Click()
Dim s As String
Dim j As Long
'如果是数字,则继续
If IsNumeric(Text1.Text) Then
    j = CLng(Text1.Text)            '取数,存在溢出可能
    s = Hex(j)                      '转16进制
    '补零
    If Len(s) < 8 Then
        s = String(8 - Len(s), "0") & s
    End If
    '每隔2位增加一个空格
    s = Left(s, 2) & " " & Mid(s, 3, 2) & " " & Mid(s, 5, 2) & " " & Right(s, 2)
    Text2.Text = s      '显示结果
End If
End Sub


---------------------------------------
拿 zhuyongxing 的代码改的
Dim tempcardnum As Long
Dim s As String
Dim s2 As String
 
tempcardnum = CLng(Text1.Text)             '增加处理函数,显式转换函数,此处有溢出
s = Hex(tempcardnum)                       
 
Select Case Len(s) '使用多分支选择,可以避免多次计算 len(s) 的值
    Case 8
        s2 = Mid(s, 1, 2) + " " + Mid(s, 3, 2) + " " + Mid(s, 5, 2) + " " + Mid(s, 7, 2)
    Case 7
        s2 = "0" + Mid(s, 1, 1) + " " + Mid(s, 2, 2) + " " + Mid(s, 4, 2) + " " + Mid(s, 6, 2)
    Case 6
        s2 = "00" + " " + Mid(s, 1, 2) + " " + Mid(s, 3, 2) + " " + Mid(s, 5, 2)
    Case 5
        s2 = "00" + " " + "0" + Mid(s, 1, 1) + " " + Mid(s, 2, 2) + " " + Mid(s, 4, 2)
    Case 4
        s2 = "00" + " " + "00" + " " + Mid(s, 1, 2) + " " + Mid(s, 3, 2)
    Case 3
        s2 = "00" + " " + "00" + " " + "0" + Mid(s, 1, 1) + " " + Mid(s, 2, 2)
    Case 2
        s2 = "00" + " " + "00" + " " + "00" + " " + s
    Case 1
        s2 = "00" + " " + "00" + " " + "00" + " " + "0" + s
    Case Else
        s2 = "00 00 00 00"
End Select
Text2.Text = s2

授人于鱼,不如授人于渔
早已停用QQ了
2009-09-21 10:58
bccnvb6
Rank: 2
等 级:论坛游民
帖 子:28
专家分:15
注 册:2008-10-17
收藏
得分:0 
Private Sub Text1_Change()
a = Hex(Val(Text1.Text))
b = Space(8 - Len(a))
c = b & a
While InStr(1, c, " ")
    c = Replace(c, " ", "0")
Wend
d = Format(c, "@@ @@ @@ @@")
Label1.Caption = d
End Sub
2009-09-21 22:09
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
学习了
d = Format(c, "@@ @@ @@ @@")
函数的用法

测试这个函数的速度如下
----------------------------------------
Dim ti1 As Double, ti2 As Double, ti3 As Double, ti4 As Double
Dim kk As Long
 
Dim a As String
Dim b As String
Dim c As String
Dim d As String
 
Dim s As String
Dim j As Long
 
ti1 = Timer
For kk = 1 To 100000
    j = CLng("235678")            '取数,存在溢出可能
    s = Hex(j)                      '转16进制
    '补零
    If Len(s) < 8 Then
        s = String(8 - Len(s), "0") & s
    End If
    '每隔2位增加一个空格
    's = Left(s, 2) & " " & Mid(s, 3, 2) & " " & Mid(s, 5, 2) & " " & Right(s, 2)
    s = Format(s, "@@ @@ @@ @@")
Next kk
ti2 = Timer
 
ti3 = Timer
For kk = 1 To 100000
    a = Hex(Val("235678"))
    b = Space(8 - Len(a))
    c = b & a
    While InStr(1, c, " ")
        c = Replace(c, " ", "0")
    Wend
    d = Format(c, "@@ @@ @@ @@")
Next kk
ti4 = Timer
 
Text3.Text = ti2 & "-" & ti1 & "=" & ti2 - ti1 & vbCrLf & ti4 & "-" & ti3 & "=" & ti4 - ti3



--------------结果如下-------------------
81970.296-81970.109=.187000000005355
81970.734-81970.296=.437999999994645

'改用手动取字符串,
82080.375-82080.062=.312999999994645

'bccnvb6 的,用 string 函数,不用再把空格换成 0 ,
82169.328-82169.078=.25

'bccnvb6 的,用 clng 函数,不用 val 函数
82260.64-82260.468=.172000000005937

-------------------------
最终优化结果建议:无


授人于鱼,不如授人于渔
早已停用QQ了
2009-09-21 22:56
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 
大家真是太强大了
那么我把我最后使用的方法也跟大家分享一下啦!

'''Function GeShiHua(St As String) As String
'''    Dim Str1 As String, Str2 As String, Str3 As String
'''
'''    If Len(St) > 8 Then
'''        GeShiHua = ""
'''        Exit Function
'''    End If
'''    Str1 = "00000000"
'''    Str2 = Left(Str1, 8 - Len(St)) & St
'''    For i = 1 To 8 Step 2
'''        Str3 = Str3 & Mid(Str2, i, 2) & " "
'''    Next
'''    GeShiHua = Trim(Str3)
'''End Function

生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2009-09-30 14:04
天堂小蚊子
Rank: 1
来 自:上海
等 级:新手上路
帖 子:8
专家分:0
注 册:2008-7-10
收藏
得分:0 
学习了!。。。
感谢楼上各位

很傻很强大。。。
2009-10-09 15:38
红影
Rank: 1
等 级:新手上路
威 望:2
帖 子:659
专家分:0
注 册:2006-2-22
收藏
得分:0 
我也相当感谢大家!

生命中,不断有人离开和进入。于是,看见的,看不见了;记住的,遗忘了。
2010-04-20 15:59
skdyu
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2007-3-26
收藏
得分:0 
谢谢各位,看帖学习了。
2010-12-22 18:59
快速回复:显示十六进制数的问题!
数据加载中...
 
   



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

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