VB.Net 2010 Express lese Müll wenn ASCII > 127

Gast #2509530
Lesenswert?
• ▲
▼
Hallo Forengemeinde,
Ich verwende die FTD2XX_NET.dll in Verbindung mit VB.Net 2010 Express.
(Die FTD2XX_NET.dll ist die Softwareschnittstelle zu einem USB->RS232 
umsetzers)
Das funktioniert soweit sehr gut.
Um Daten zu übertragen bildet man eine String-Zeichenkette. Jedes 
Zeichen entspricht ein Byte. Den String übergibt man dann der Sub.
Sendent klappt das einwandfrei auch mit Zeichen zw. ASCII 128 und 255, 
Sprich Bit7 ist gesetzt.
Beim lesen geht das auch suprer solange Bit 7 nicht gesetzt ist.
Ist Bit 7 gesetzt kommt nur Müll raus.

Public FT_InBuffer As String = ""
Public trasmited As Integer
Public recived As Integer
....
FT_Device.Read(FT_InBuffer, trasmited, recived)

Datum=(Asc(FT_InBuffer(i))

Kennt jemand das Problem ?

LG Christof
Gast #2509720
Lesenswert?
• ▲
▼
Wenn du kein ASCII hast (sprich das 8.Bit verwendest), solltet du die 
string-Varianten von .Read() und .Write() vermeiden, da verwendet ftdi 
intern Encoding.ASCII, welches das 8.Bit ignoriert.

Nimm die byte[]-Varianten und wandle mit:
Encoding enc=Encoding.GetEncoding(1252);
// bzgl. der 1252: http://en.wikipedia.org/wiki/Windows-1252
// das ist in der Regel die passende Codepage

und enc.GetBytes() bzw. enc.GetString() zwischen byte[] und string um.
(Ich bin C#'ler, wird aber in VB.net wohl ähnlich/identich sein)
#2509774
Lesenswert?
• ▲
▼
Christof Rieger schrieb:
> Um Daten zu übertragen bildet man eine String-Zeichenkette. Jedes
> Zeichen entspricht ein Byte. Den String übergibt man dann der Sub.
> Sendent klappt das einwandfrei auch mit Zeichen zw. ASCII 128 und 255,
> Sprich Bit7 ist gesetzt.

ASCII hat nur 7 Bit. Daher gibt es da kein 128 bis 255 und kein Bit 7. 
Siehe auch http://de.wikipedia.org/wiki/Ascii
Alles, was darüber hinaus geht muß mit einem anderen Encoding gemacht 
werden. Welches das ist, hängt davon ab, was die Gegenstelle verwendet.
Gast #2510512
Lesenswert?
• ▲
▼
Stimmt !
ASCII ist nur bis 127 definiert. Das hatte ich verdrängt.
Damit sind die Befehle Chr()(Byte zu Zeichen) und Asc()(Zeichen zu Byte) 
nicht korrekt.
Eine Code-Tabellenbehandlung benötige ich nicht.

Wenn die FTD2XX_NET.dll mir:

65 67 69 189 in den String-Buffer schreibt sieht VB.NET
A  C  E  [irgendwass]
Ich brauche jetzt eine Möglichkeit aus
A  C  E  [irgendwass] unverändert wieder
65 67 69 189 zu machen. Mir ist jetzt klar das Asc([irgendwass]) nicht 
geht!
und warscheinlich Chr(189) auch nicht wirklich das richtige macht.
Ich bräuchte eine art Rawread und Rawwrite !

Kennt das jemand ?

LG Christof
#2510554
Lesenswert?
• ▲
▼
Christof Rieger schrieb:
> Ich bräuchte eine art Rawread und Rawwrite !
>
> Kennt das jemand ?

FTD2XX_NET.dll mit den Funktionen Read und Write (die es in Varianten 
für Strings und Byte-Arrays gibt), dazu das passende Encoding
Beitrag "Re: VB.Net 2010 Express lese Müll wenn ASCII > 127"
und/oder man könnte auch die FTD2XX_NET.dll entsprechend erweitern 
http://www.ftdichip.com/Support/SoftwareExamples/CodeExamples/CSharp/FTD2XX_NETclass.zip
Gast #2511182
Lesenswert?
• ▲
▼
Fettes Danke an Arc Net,
Ich hatte mir damals nur ein Programmbeispiel angeschaut, und da wurde 
alles nur über Strings übergeben.
So kam ich nicht auf die Idee, das es auch mit Bytearrays geht.
Ich habe mein Programm umgeschrieben und jetzt klaptt es mit Bit 7

Ein Toller Nebeneffekt das Programm ist um 30% schneller geworden.

LG Christof

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.