VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > VB.net教程 >
  • VB.net小技巧——数字的进制转化及处理

VB.net小技巧——数字的进制转化及处理
在与FPGA的交互中,一般来说16进制,2进制用的比较多,但在界面中一般需要转化成10进制进行显示和公式运算。因此在这里列出一些常用的进制转化的方法,以便查阅。
 
1、10进制转2进制、16进制
 
        Dim int As Int32 = -32768
        '十进制转二进制
        Dim str2 As String = Convert.ToString(int, 2)
        '十进制转十六进制
        Dim str16 As String = Convert.ToString(int, 16)
        Debug.WriteLine("十进制转二进制:" & str2)
        Debug.WriteLine("十进制转十六进制:" & str16)
 
返回结果为
 
十进制转二进制:11111111111111111000000000000000
十进制转十六进制:ffff8000
 
2、16进制转10进制
 
 
        '十六进制
        Dim str16 As String = "8000"
 
        '十六进制转十进制
        Dim int16 As Integer = Convert.ToInt16(str16, 16)
        Debug.WriteLine(int16)
        Dim int32 As Integer = Convert.ToInt32(str16, 16)
        Debug.WriteLine(int32)
 
结果为
 
-32768
32768
 
3、接收到的数据为32bit,其中[28:0]是有效位,是一个有符号数,但[31:29]为0
 
 
        Dim str32 As String = "10000009"
        Dim mask As String = "e0000000"
 
        '十六进制转十进制
 
        Dim int32 As Integer = Convert.ToInt32(str32, 16) Or Convert.ToInt32(mask, 16)
        Debug.WriteLine(int32)
 
4、根据工程实际需求,设计一个函数满足数据截取和数据计算的需求。
形参:
1、string 32bit 数据
2、有效位置:按照verilog的习惯表达,例如[5:4],[0],[31:0]等
3、指示这个数据是不是有符号数
 
    Public Function bitterCal(ByVal aa As String, ByVal bb As String, ByVal cc As UInt32) As Int64
        Dim dd = Strings.Replace(Strings.Replace(bb, "[", ""), "]", "")
        Dim ff(2) As String
        Dim ee(2) As String
        ee = Split(dd, ":")
        If ee.Length = 1 Then
            ff(0) = ee(0)
            ff(1) = ee(0)
        ElseIf ee.Length = 2 Then
            ff(0) = ee(0)
            ff(1) = ee(1)
        End If
 
        Dim gg(2) As Int16
        gg(0) = Val(ff(0))
        gg(1) = Val(ff(1))
 
 
        Dim hh As UInt64 = CLng("&h" & aa) >> gg(1)
        Dim mask1 As Int64 = -2 ^ (gg(0) - gg(1) + 1)
        Dim ii As Int64 = hh Or mask1
        If cc = 0 Then
            ii = hh And (Not mask1)
        End If
 
        bitterCal = ii
 
 
    End Function  
 
例如,输入
 
Debug.WriteLine(bitterCal("ffffffff", "[31:0]", 1))
1
输出为 -1。
 
Debug.WriteLine(bitterCal("00c4c4c4", "[15:8]", 1))
1
输出为 -60。
这样就比较方便了。
 
我这样写肯定不是最简洁的,有更好建议的童鞋在评论区可以留言指正。
————————————————
版权声明:本文为CSDN博主「十年老鸟」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gzy0506/article/details/121483094

相关教程