栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

VB.net小技巧——数字的进制转化及处理

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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。

Debug.WriteLine(bitterCal("00c4c4c4", "[15:8]", 1))

输出为 -60。
这样就比较方便了。

我这样写肯定不是最简洁的,有更好建议的童鞋在评论区可以留言指正。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906138.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号