none
如何将一个字符串,按每两字符转成一byte?标准.hex文件处理 RRS feed

  • 问题

  • 标准的intel格式的.hex文件一般都是如下格式的:

    :10000000D855001071410000094200000B42000069

    :10000000是头,我现在需要把其中的数据部分提取出来,显示在texbox里面,后面还需要发送给下位机,
    这个是从hex文件里读出来的字符串: D855001071410000094200000B420000

    显示的格式如下:D8 55 00 10 71 41 00 00 09 42 00 00 0B 42 00 00(实际上是16byte的16进制数据),这部分好处理,不需要做字符串到16进制转换,但是我因为还得显示这16个byte对应的ASCII码,所以还是得转成16进制。

    一句话,就是如何讲readline读出来的字符串,按每2位转1byte,比如D8转成0xD8...以此类推。

    还有因为标准的hex文件有的很大100k-200k,每次读一行,然后load到textbox控件,还得通过串口发给下位机,怎么做能加快load速度?

    谢谢大家

    2013年8月23日 12:49

答案

全部回复

  • 如果我没有理解错你的意思,你的意思就是:

    1)读取一行

    2)每隔两位分割,前面加“0x”前缀。

    3)加快速度

     Dim sbu As New StringBuilder
            Dim reg As New Regex("[A-Z0-9]{2}")
     
            '读取全部的行
            For Each s As String In System.IO.File.ReadAllLines("DataFile.txt")
                '分割成带有空格和前缀的行
                Dim tmps As String = Nothing
                For Each ts As Match In reg.Matches(s)
                    tmps &= "0x" & ts.Value & " "
                Next
                sbu.AppendLine(tmps)
            Next

    关于3,建议可以像我一样在内存中先处理数据,进行分割,最后只显示结果。


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report

    2013年8月24日 6:04
    版主
  • Convert.ToByte 方法 (String, Int32)

    http://msdn.microsoft.com/zh-tw/library/c7xhf79k.aspx

    2013年8月24日 15:20
  • 谢谢二位,我已经搞定了。速度可以。基本没有太多延时,180k的文件,会卡1-2s,基本可以接受。

    后面看看能不能再优化一下,做完了,我发我的代码。

    2013年8月27日 9:03