We have written a customized class for various conversion between ASCII code and string that we need to use occasionally. The source code for the class can be downloaded A Visual Basic class to convert between hexadecimal, ascii, and text string on GitHub.
'Author: Yan Naing Aye 'WebSite: http://cool-emerald.blogspot.sg/ 'Updated: 2009 April 24 '----------------------------------------------------------------------------- Public Class ClsMyStr Public Shared Function AsAsciiEncodedStr(ByVal CharString As String) As String Dim outS As String = "" Dim temp As String = "" Dim i As Integer = 0 For i = 0 To CharString.Length - 1 temp = "00" & Hex(Asc(CharString(i))) temp = Right(temp, 2) outS = outS & temp Next i Return outS End Function Public Shared Function AsSpacedAsciiEncodedStr(ByVal CharString As String) As String Dim outS As String = "" Dim temp As String = "" Dim i As Integer = 0 For i = 0 To CharString.Length - 1 temp = "00" & Hex(Asc(CharString(i))) temp = Right(temp, 2) outS = outS & temp & " " Next i Return outS End Function Public Shared Function AsAsciiDecodedStr(ByVal AsciiEncodedStr As String) As String Dim outS As String = "" Dim i As Integer = 0 Dim l As Integer = AsciiEncodedStr.Length - 2 If (AsciiEncodedStr.Length Mod 2) <> 0 Then l -= 1 End If For i = 0 To l Step 2 outS = outS & Chr(Val("&H" & AsciiEncodedStr.Substring(i, 2))) Next i Return outS End Function Public Shared Function GetAsciiEncodedStr(ByVal RawAsciiEncodedStr As String) As String Dim i As Integer = 0 Dim c As String Dim cmd As String = "" For i = 0 To RawAsciiEncodedStr.Length - 1 c = RawAsciiEncodedStr(i) If (Asc(c) >= &H30) AndAlso (Asc(c) <= &H39) Then cmd = cmd & c ElseIf (Asc(c) >= &H41) AndAlso (Asc(c) <= &H5A) Then cmd = cmd & c ElseIf (Asc(c) >= &H61) AndAlso (Asc(c) <= &H7A) Then cmd = cmd & Chr(Asc(c) - &H20) 'change to upper case Else 'MessageBox.Show("Got invalid character.") End If Next i If cmd.Length < 2 Then cmd = "0" & cmd End If Return cmd End Function Public Shared Function DoubleQuote() As String Return ControlChars.Quote End Function Public Shared Function Byte2Text(ByVal byteArray() As Byte) As String Dim str As String = BitConverter.ToString(byteArray) Return str End Function Public Shared Function Byte2Str(ByVal byteArray() As Byte) As String 'Dim str As String = System.Text.Encoding.ASCII.GetString(byteArray) Dim str As String = "" For i As Integer = 0 To UBound(byteArray) str &= Chr(byteArray(i)) Next Return str End Function Public Shared Function Str2Byte(ByVal str As String) As Byte() 'Dim ba() As Byte = System.Text.Encoding.ASCII.GetBytes(str) Dim ba() As Byte Try ReDim ba(str.Length - 1) For i As Integer = 0 To UBound(ba) ba(i) = Asc(str(i)) Next Catch ex As Exception ReDim ba(0) ba(0) = 0 End Try Return ba End Function Public Shared Function GetSignedDecimalText(ByVal RawStr As String) As String Dim i As Integer = 0 Dim c As String Dim cmd As String = "" For i = 0 To RawStr.Length - 1 c = RawStr(i) If (Asc(c) >= &H30) AndAlso (Asc(c) <= &H39) Then cmd = cmd & c ElseIf (Asc(c) = &H2D) Then If cmd.Length = 0 Then cmd = cmd & c End If Else 'MessageBox.Show("Got invalid character.") End If Next i Return cmd End Function End Class
This was very helpful for me--thank you for sharing it!
ReplyDeleteSir,how many union structures can I use in a firmware c program?
ReplyDeleteHi Thida, it should be limited by the amount of physical memory in your microcontroller, shouldn't it?
ReplyDelete