Laden...

Review: Datentypen Umrechnung

Erstellt von halsti vor 8 Jahren Letzter Beitrag vor 8 Jahren 4.247 Views
Thema geschlossen
H
halsti Themenstarter:in
4 Beiträge seit 2015
vor 8 Jahren
Review: Datentypen Umrechnung

Hallo,

ich möchte über einen µC die Werte eines 16 Bit ADC auf meinem PC ablegen. Es gibt eine Applikation von Cypress, die es ermöglicht die übertragenen Daten als text file zu speichern. Das Problem ist, dass in dem Code die Bytes einzeln abgespeichert werden, aber ein Wert besteht ja aus 2 Bytes. Ich habe kaum Programmier-Erfahrung, könnte mir daher jemand sagen wie ich untenstehenden Code ändern muss ?
Grüße

if (Save == true)                                               //Check if save Button is marked
                {
                                
                    byte[] temp1 = new byte[Offset];

                    Buffer.BlockCopy(temp, 0, temp1, 0, Offset);  
                   
                   string res = string.Join("", temp1); 
                                                                // Put all the data streamed to a single string 
                    string file_name = "C:\\users\\mady\\desktop\\mady.txt";    // Write the string to mady.txt
                    System.IO.StreamWriter objWriter;
                    objWriter = new System.IO.StreamWriter(file_name);  
                   objWriter.WriteLine(res);

                    objWriter.Close();
                }
Hinweis von Abt vor 8 Jahren

In Zukunft bitte [Hinweis] Wie poste ich richtig? "6. Code-Tags und Anhänge verwenden" beachten und den Code nicht einfach so rein klatschen.

463 Beiträge seit 2009
vor 8 Jahren

Falsch gelesen, sorry

3.003 Beiträge seit 2006
vor 8 Jahren

Sorry, aber der Codeausschnitt hinterlässt mehr Fragen als Antworten...

Was ist Offset? Wo kommt's her? Und wieso steht Offset als Parameter an der Stelle im BlockCopy, wo die Anzahl der Zeichen hinkommt, die man kopieren will?
Was steht in temp?
Wieso arbeitest du mit magic values (file_name)?
Wieso um alles in der Welt bastelt man eine Zeichenkrette aus einem Bytearray, wenn man doch die bytes schreiben will?
Wieso verwendest du für StreamWriter kein using, und wenn du das schon nicht machst, wo ist deine Ausnahmebehandlung?
Warum vergleichst du einen Boolean mit true, wenn du herausbekommen willst, ob er true ist?

Sorry, so kann man damit nichts anfangen.

LaTino

Edit:
Wenn du das machen willst, was ich denke:
https://msdn.microsoft.com/en-us/library/system.io.file.writeallbytes.aspx


File.WriteAllBytes(@"c:\users\mady\desktop\mady.txt", new byte[] { temp[0], temp[1]});

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

W
955 Beiträge seit 2010
vor 8 Jahren

Hallo,

vllt wird es verständlicher wenn du mal einen kurzen Ausschnitt postest wie die Datei aussieht von Cypress generiert wird und sagst wie das Zielformat aussehen soll.

H
halsti Themenstarter:in
4 Beiträge seit 2015
vor 8 Jahren

Ich habe mal das Programm samt source code angehängt. Danke für Eure Hilfe

3.003 Beiträge seit 2006
vor 8 Jahren

Hab mal kurz drübergeblättert und kann nur auf das Edit in meinem Posting oben verweisen, wenn du Hilfe suchst. Wie witte schreibt, da wir nicht wissen, in welchem Format du das gern haettest (binär? Zeichenkette? Wenn ja, welcher Zeichensatz?), können wir da auch nur raten.

Da wir hier im Code-Review sind: der einzige Review, den ich für den von dir angehängten Code anzubieten hätte, hat etwas mit Benzin und Streichhölzern zu tun.

Auf deutsch: da ist nichts mit review zu retten. Abreißen, neubauen.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

H
halsti Themenstarter:in
4 Beiträge seit 2015
vor 8 Jahren

Naja der Code funktioniert ja gut. Also ich bekomme die 16 Bit im 2er komplement. Optimal wäre es wenn als Ausgabe dann Werte von - 32768 bis 32767 also dezimal kommen.

3.003 Beiträge seit 2006
vor 8 Jahren

Little Endian? Big Endian?

Die Lösung steht übrigens immer noch im Edit meines ersten Postings.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

H
halsti Themenstarter:in
4 Beiträge seit 2015
vor 8 Jahren

Big Endian. Also mit deiner Lösung wird zwar ein File erzeugt aber da steht nichts drin außer nem Sonderzeichen.

3.003 Beiträge seit 2006
vor 8 Jahren

Du beschäftigst dich mit Bitschubserei und weisst nicht, wie du dir eine binäre Datei anschauen sollst? Keine weiteren Fragen.


bool isLittleEndian = true;
var count = 0;
var stringBuilder = new StringBuilder();
while (count < temp.Length/2)
{
      var writeBytes = isLittleEndian
            ? new[] { temp[2 * count], temp[2 * count + 1] }
            : new[] { temp[2 * count + 1], temp[2 * count] };
      stringBuilder.AppendLine(BitConverter.ToInt16(writeBytes,0).ToString());
      count++;
}
File.WriteAllText(@"c:\tmp\testdump2.txt", sb.ToString());

Ich denke, hier kann dann zu, es besteht offenbar weder Lerninteresse, Interesse an einem Codereview auch nicht, und auf die Fragen der Leute, die helfen wollten, wird auch nicht eingegangen, also das typische "hier, macht mal, hab keine Lust".

Da ich jetzt brav war und gemacht habe, kann hier zu, denke ich.

LaTino, leicht genervt

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

O
79 Beiträge seit 2011
vor 8 Jahren

Ich glaube, hier hat der TE den Unterschied zwischen Bytes und Zeichenketten noch nicht verstanden.

Empfängt man die Bytes "02 AE" und schreibt diese in eine Textdatei, dann zeigt Notepad nun mal nicht automatisch "44546" an, sonden zwei kryptische Zeichen.

5.657 Beiträge seit 2006
vor 8 Jahren

Hi halsti,

den Umgang mit Zeichenketten und binären Daten setzen wir hier im Forum voraus. Wenn es dazu eine konkrete Frage gibt, kannst du die im entsprechenden Forum stellen, z.B. im Grundlagen-Forum. Das Review-Forum ist dafür aber der falsche Ort.

Bitte beachte beim nächsten Mal unbedingt unsere Regeln für das Review-Forum: Code-Review Regeln, besonders die Punkte "1 Code muss compilieren" und "2 Wir suchen nicht eure Fehler".

Christian

Weeks of programming can save you hours of planning

Thema geschlossen