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();
}
In Zukunft bitte [Hinweis] Wie poste ich richtig? "6. Code-Tags und Anhänge verwenden" beachten und den Code nicht einfach so rein klatschen.
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)
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.
Ich habe mal das Programm samt source code angehängt. Danke für Eure Hilfe
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)
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.
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)
Big Endian. Also mit deiner Lösung wird zwar ein File erzeugt aber da steht nichts drin außer nem Sonderzeichen.
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)
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.
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