Solved

Ascii to string conversion vb.net?

Posted on 2006-06-16
7
603 Views
Last Modified: 2012-05-05
Hello experts I am having an issue with some converting from a byte to a string.  I am receiving a value from comport in bytes and I convert it to  a string.  The problem is the string is suppose to be 16 characters long  but when I read it in only 8 characters can be read at one time it breaks it up into two 8 character strings and I am not sure why.  I am trying to convert it to characters and see if that works.  If someone could explain in a little more detail what is going on with these lines of code that might help.

  Dim oEncoder As New System.Text.ASCIIEncoding
            Dim oEnc As Encoding = oEncoder.GetEncoding(1252)
            '-------------------------------------------------------------
            If Not Me.InputStream Is Nothing Then Return oEnc.Getstring(Me.InputStream)


'here is the entire property
 Overridable ReadOnly Property InputStreamString() As string
              Get
            Dim oEncoder As New System.Text.ASCIIEncoding
            Dim oEnc As Encoding = oEncoder.GetEncoding(1252)
            '-------------------------------------------------------------
            If Not Me.InputStream Is Nothing Then Return oEnc.Getstring(Me.InputStream)
        End Get
    End Property

I tried converting it to characters  
Overridable ReadOnly Property InputStreamString() As char()
              Get
            Dim oEncoder As New System.Text.ASCIIEncoding
            Dim oEnc As Encoding = oEncoder.GetEncoding(1252)
            '-------------------------------------------------------------
            If Not Me.InputStream Is Nothing Then Return oEnc.GetChars(Me.InputStream)
        End Get
    End Property

The value gets read into my program using an event like so:

  Public Sub comhold_CommEvent(ByVal source As Rs232, ByVal Mask As Rs232.EventMasks) Handles comhold.CommEvent
     
        Dim sread As string
        sread = comhold.InputStreamString
End sub
0
Comment
Question by:tentavarious
  • 4
  • 3
7 Comments
 
LVL 48

Expert Comment

by:AlexFM
ID: 16922614
ASCIIEncoding class works with Unicode characters. Every Unicode character is two bytes.
0
 

Author Comment

by:tentavarious
ID: 16922638
ok, so how could I convert the bytes into chars then convert the chars into a string?
0
 
LVL 48

Accepted Solution

by:
AlexFM earned 350 total points
ID: 16922679
Well, the simplest way that I see is to read bytes from the stream and add every byte to string casting it to Char type.
0
Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

 

Author Comment

by:tentavarious
ID: 16922722
Ok, so back to the top, how come the sread value in my code only gets 8 characters.  The comhold event has to fire twice to read in the entire string.
0
 
LVL 48

Expert Comment

by:AlexFM
ID: 16922759
Because every character in the sread value contains two bytes from input stream. Instead of packing two butes to one character, you need to convert every byte to character.
0
 

Author Comment

by:tentavarious
ID: 16922824
ok so how would I go about doing that changing the input stream to this:
Overridable ReadOnly Property InputStreamString() As char()
              Get
            Dim oEncoder As New System.Text.ASCIIEncoding
            Dim oEnc As Encoding = oEncoder.GetEncoding(1252)
            '-------------------------------------------------------------
            If Not Me.InputStream Is Nothing Then Return oEnc.GetChars(Me.InputStream)
        End Get
    End Property

Then chaning sread to this:
  Dim sread() As char
 
I am not sure on how to convert the characters back into a string.
0
 

Author Comment

by:tentavarious
ID: 16922953
I was just missing around with conversions this seems to work so basically since it is being read in as bytes alls i would need to do is convert it to characters then use a ctype(char variable, string) to get it back to a string correct?

 Dim sval As String = "1234567890123456"
        Dim oEncoder As New System.Text.ASCIIEncoding
        Dim byteval As Byte() = oEncoder.GetBytes(sval)
        Dim newstring As Char() = oEncoder.GetChars(byteval)
        Dim stringfinal As String = CType(newstring, String)
    End Sub
0

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

This article explains how to create and use a custom WaterMark textbox class.  The custom WaterMark textbox class allows you to set the WaterMark Background Color and WaterMark text at design time.   IMAGE OF WATERMARKS STEPS Create VB …
Since .Net 2.0, Visual Basic has made it easy to create a splash screen and set it via the "Splash Screen" drop down in the Project Properties.  A splash screen set in this manner is automatically created, displayed and closed by the framework itsel…
This Micro Tutorial hows how you can integrate  Mac OSX to a Windows Active Directory Domain. Apple has made it easy to allow users to bind their macs to a windows domain with relative ease. The following video show how to bind OSX Mavericks to …
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, just open a new email message. In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…

813 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now