none
在VB2008中如何將16進制與ASCII碼互換 RRS feed

  • 问题

  • 請教各位大哥在小弟再做PC與PLC通訊時..因PLC手冊的通訊格式為16進制碼.但經乙太網路傳送命令給PLC時則須轉換為ASCII碼.然而再VB6時代小弟能這麼做

    Dim SXD As String
    Dim MS() As Byte
    SXD = "80"+"00"+"02"+"00"+"66"+"00"+"00"+"0A"+"00"+"00"+"01"+"01"+"82"+"0D"+"AC"+"00"+"00"+"01"
    l = Len(SXD)
    For j = 1 To l Step 2
    a = a + ChrB(Val("&H" + Mid$(SXD, j, 2)))
    Next j
    L1 = LenB(a)
    MS() = LeftB(a, L1)

    這樣便能將 每各值轉為 位元存放於 MS() 中.
    但在VB.net中ChrB,LenB,LeftB 均以不再支援..請問各位大哥以上的程式的功能如何再VB2008中實現呢?
    2009年8月11日 15:50

答案

  •         Dim SXD = "800002006600000A00000101820DAC000001"
            Dim MS() As Byte

            ReDim MS(SXD.Length \ 2 - 1)
            For i As Integer = 0 To MS.Length - 1
                MS(i) = CByte(Val("&H" & SXD.Substring(i * 2, 2)))
            Next i

            Dim str = String.Concat(MS.Select(Function(b) b.ToString("X2")).ToArray)
            Console.Write(str)
            Console.ReadKey()


    答案破千
    2009年8月12日 2:50

全部回复

  • 試出來了
    這段改成如此
        這是轉成ASCII的程式

    Dim SXD As String
            Dim MS() As Byte
            SXD = "800002006600000A00000101820DAC000001"
          ReDim MS(SXD.Length \ 2 - 1)
            For i As Integer = 0 To MS.Length - 1
                MS(i) = CByte(Val("&H" & SXD.Substring(i * 2, 2)))
            Next i
    能否請各位大哥幫忙想一下 
            Dim s As String
            s = Encoding.ASCII.GetString(MS)
    將s轉回"800002006600000A00000101820DAC000001"這樣
    2009年8月11日 16:31
  •         Dim SXD = "800002006600000A00000101820DAC000001"
            Dim MS() As Byte

            ReDim MS(SXD.Length \ 2 - 1)
            For i As Integer = 0 To MS.Length - 1
                MS(i) = CByte(Val("&H" & SXD.Substring(i * 2, 2)))
            Next i

            Dim str = String.Concat(MS.Select(Function(b) b.ToString("X2")).ToArray)
            Console.Write(str)
            Console.ReadKey()


    答案破千
    2009年8月12日 2:50