求一个10进制转十六进制的vb代码,要支持非常大的数的(30位)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一个10进制转十六进制的vb代码,要支持非常大的数的(30位)相关的知识,希望对你有一定的参考价值。
知道一般的情况可用Hex来求,但很大的数(比如:12345678901234567890123456789),就不行了,用计算器转化是6E398115,用vb代码可以实现吗?
如果现在要写一个小程序,可转换一些比较大的10进制数字到16进制,该怎么写呢 ??请以两个文本框和一个按钮为例!
网上的代码也有一些,但是输入的十进制数最大只能为输入的最大数为2147483647,百度也有人问过,但是回答的代码也是错的,到十多位的转换就出错了。
chenxfsoft我等你啊,谢谢! 记得以两个文本框和一个按钮为例哦
用double吧
我试了试,没等到结果,因为我的算法还须改进,如果你能等,你就等吧,结果应该对
为了你这200分我等下去改进算法
改好了如下:
'汗,我是牛人 :D
Private Sub Command1_Click()
Dim s As String
s = Text1.Text
Dim i As Integer
For i = 1 To Len(s)
If Not IsNumeric(Mid(s, i, 1)) Then
MsgBox "输入有问题"
Exit Sub
End If
Next
Me.Text2.Text = BigHex(s)
End Sub
Private Function BigHex(ByVal x As String) As String
Dim m As Integer
Dim s As String
Dim V As String
V = "0123456789ABCDEF"
Do
If Len(x) <= 3 Then
If CInt(x) < 16 Then Exit Do
End If
m = DoubleMod(x, 16, x)
s = Mid(V, m + 1, 1) & s
Loop
m = Int(x)
s = Mid(V, m + 1, 1) & s
BigHex = s
End Function
Private Function DoubleMod(ByVal a As String, ByVal b As Integer, ByRef c As String) As Integer
Dim l As Integer, i As Integer
l = Len(a)
c = ""
Dim s As String
s = ""
i = 0
Dim m As Integer, t As Integer
Do
If Len(a) = 0 Then Exit Do
s = s & Left(a, 1)
a = Right(a, Len(a) - 1)
t = s
s = t Mod b
c = c & Int(t / b)
Loop
Do Until Len(c) = 0 Or Left(c, 1) <> "0"
c = Right(c, Len(c) - 1)
Loop
If Len(c) = 0 Then c = 0
DoubleMod = s
End Function 参考技术A 多大都可以. 用除法一位位做就是了.
VB好久不用了. VC要的话发个消息,抽空做下. 参考技术B 1234567890double3就可以了。或Private Sub Command1_Click()
Dim s As String
s = Text1.Text
Dim i As Integer
For i = 1 To Len(s)
If Not IsNumeric(Mid(s, i, 1)) Then
MsgBox "输入有问题"
Exit Sub
End If
Next
Me.Text2.Text = BigHex(s)
End Sub
Private Function BigHex(ByVal x As String) As String
Dim m As Integer
Dim s As String
Dim V As String
V = "0123456789ABCDEF"
Do
If Len(x) <= 3 Then
If CInt(x) < 16 Then Exit Do
End If
m = DoubleMod(x, 16, x)
s = Mid(V, m + 1, 1) & s
Loop
m = Int(x)
s = Mid(V, m + 1, 1) & s
BigHex = s
End Function
Private Function DoubleMod(ByVal a As String, ByVal b As Integer, ByRef c As String) As Integer
Dim l As Integer, i As Integer
l = Len(a)
c = ""
Dim s As String
s = ""
i = 0
Dim m As Integer, t As Integer
Do
If Len(a) = 0 Then Exit Do
s = s & Left(a, 1)
a = Right(a, Len(a) - 1)
t = s
s = t Mod b
c = c & Int(t / b)
Loop
Do Until Len(c) = 0 Or Left(c, 1) <> "0"
c = Right(c, Len(c) - 1)
Loop
If Len(c) = 0 Then c = 0
DoubleMod = s
End Function 参考技术C 有一种计算器可以 参考技术D 关注中。。。
vb6.0开发的上位机串口助手(自动识别电脑端口号支持文本十六进制发送)
VB是可视化的编程,就是把一些图标控件拖到编程板上,然后用代码编写每个按钮的实现功能,(如:按下按钮会发生什么事)
vb在零几年的时候非常流行,近年来逐渐淡出人们的视野,但是用其来编写一些简单的上位机还是很方便的,可搭配单片机使用。如编写个串口助手,单片机检测到温湿度在上位机上显示等
言归正传,我就是编写了一个串口助手的简单上位机,来给大家分享一下。
程序中含有超多注释,用最直观的大白话解释清楚代码的意思,极利于学习。
首先看一下界面:
内容比较丰富,基本上和我们日常所用串口助手差不多。
介绍一下本程序重要的几部分,也是较难的几部分
一、串口连接部分
可自动识别电脑上的可用端口
我查了很多资料,发现其他人写的程序大多是将串口一一罗列,很不好,如下所示:
而本次介绍的程序和设备管理器中的端口号一一对应而不是单纯的罗列出来。
'函数功能:查询电脑可用的串口号,将其显示在组合框中
Private Sub Uart_Init()
Dim a
Dim temp%
temp = 0
For a = 1 To 16 '循环检查可能存在的16个串口
MSComm1.CommPort = a
On Error Resume Next '出现错误时,不会被打断(假如电脑上可用端口为COM1、COM2、COM4,若没有这行代码 当a=3时会报错)
MSComm1.PortOpen = True '打开串口
If MSComm1.PortOpen = True Then
Combo1_select.AddItem ("COM" & a), temp '将检测可用的端口添加到组合框中
temp = temp + 1
MSComm1.PortOpen = False
End If
Next
二、发送数据
采用定时器控件,可连续发送也可手动调用发送
'函数功能:发送数据(判断数据格式)
'如何实现:1、通过开启定时器连续发送; 2、直接调用该函数单词发送
Private Sub Timer1_Timer()
Dim longth As Integer
If Option3.Value = True Then
intOutMode = 1
Else
intOutMode = 0
End If
strSendText = Text2.Text
If intOutMode = 0 Then
MSComm1.Output = strSendText
Else
longth = strHexToByteArray(strSendText, bytSendByte()) '只要勾选了十六进制发送,Text2中的数据都是十六进制的ASCII码(文本形式)(如1的十六进制ASCII码为 31)
If longth > 0 Then
MSComm1.Output = bytSendByte
End If
End If
End Sub
三、接受数据
用MSComm控件的OnComm事件。当接收到数据时,就会触发OnComm事件,从而接收到数据。
'只要有通讯错误或事件发生时都会产生 OnComm 事件
Private Sub MSComm1_OnComm()
Dim bytInput() As Byte
Dim intInputLen As Integer
Dim n As Integer
Dim teststring As String
Select Case MSComm1.CommEvent
Case comEvReceive '接受事件中断
If Option1.Value = True Then
MSComm1.InputMode = 1 '1:十六进制显示
Else
MSComm1.InputMode = 0 '0:文本方式显示
End If
intInputLen = MSComm1.InBufferCount
bytInput = MSComm1.Input '提取接收缓冲区中的数据(数据格式:十进制的ascii码)
If Option1.Value = True Then
For n = 0 To intInputLen - 1
Text1.Text = Trim(Text1.Text) & " " & IIf(Len(Hex$(bytInput(n))) > 1, Hex$(bytInput(n)), "0" & Hex$(bytInput(n))) 'hex函数:用十进制的ASCII码 返回十六进制的String
Next n
Else
teststring = bytInput
Text1.Text = Text1.Text + teststring
End If
End Select
Text1.SelStart = Len(Text1.Text) '光标移到最后,每次显示最后一行
End Sub
在这里重点强调一下MSComm控件。
该控件就时串口通讯最主要的控件,串口连接、串口通讯都是该控件。
当新加载工程时,在左侧控件窗口中是没有该控件的,如下图:
需要手动去添加:工程——>部件——>Microsoft Comm Control 6.0前面勾选上
完整开源工程:https://download.csdn.net/download/m0_59113542/76680304
下面这个也是用vb6.0做的温度采集控制系统,单片机测数据经过串口传输给上位机显示。
开源工程:https://download.csdn.net/download/m0_59113542/77294120
欢迎大家提出宝贵的意见。
有机会一起讨论代码,嘿嘿嘿!
以上是关于求一个10进制转十六进制的vb代码,要支持非常大的数的(30位)的主要内容,如果未能解决你的问题,请参考以下文章