Hallo ich bin ein Megaanfänger, der Byte Arrays in Integer umwandeln
will und trotz hochentwickelten Neuheiten wie "Google" usw...nicht in
der Lage ist.
Hintergrund: ich will ein paar Byte arrays addieren, das Ergebnis soll
dann ebenfalls in einem Byte array gespeichert werden. ( Sprache c# )
z.b.
Ergebnis[0] = byte[0] + byte[1] + byte[2];
Ich bin zwar nur gelernter Metzger, aber "Ergebnis[0]" müsste ja erst
Integer sein und dann in byte gewandelt werden?!
Davor müssten die byte arrays natürlich zu Integer gewandelt werden!?
Mich haben die ganzen Foren, die ich seit heut Morgen durchforste,
ziemlich verwirrt
Bevor ihr mich auf andere Seiten verweist, tippt lieber kurz nen
Beispiel für mich runter, ich kenn nämlich schon ( fast ) jede Seite im
Web, die sich damit beschäftigt!!
Gruß
Jean schrieb:> Bevor ihr mich auf andere Seiten verweist, tippt lieber kurz nen> Beispiel für mich runter, ich kenn nämlich schon ( fast ) jede Seite im> Web, die sich damit beschäftigt!!
Auch die, auf denen man die Grundlagen der C-Programmierung lernt?
Jean schrieb:> Beispiel für mich runter, ich kenn nämlich schon ( fast ) jede Seite im> Web, die sich damit beschäftigt!!
Du solltest besser in die nächste Buchhandlung gehen und dir ein C# Buch
kaufen.
Da hast du meistens mehr davon, als wenn du dir im Web anlassbedingt
Halbwissen zusammensammelst. Gerade bei der ersten Programmiersprache
sind die Grundlagen das um und auf. Alles hängt irgendwie über 5 Ecken
mit allem anderen zusammen und diese Zusammenhänge versteht man nur dann
wenn man systematisch an die Sache ran geht.
Bücher tun das. Da hat sich jemand einen systematischen Weg ausgedacht,
wie er in kleinen Schritten vom einfachen zum Schwierigen kommt ohne den
Leser zu überfordern und ohne dass zunächst Unlogikeiten ins Spiel
kommen.
Web-Seiten (und auch Web-Tutorials) tun das in den wenigsten Fällen.
in das array "erg" soll dann das ergebnis in hex geschrieben werden, ich
muss aber noch definieren wo genau oder?! z.b. erg[0] oder ?
zumindest kommen mal kein Fehler, aber richtig funktionieren tuts auch
nicht.
@ kbuchegg
hast Recht, aber im Moment gehts wirklich nur um diese Kleinigkeit, wenn
ich tiefer in die Richtung gehe, dann mach ich das natürlich..
Gruß
> Danke für die schnelle Hilfe, aber ich hab jetzt folgendes gemacht:
Da machst Du aber etwas komplett anderes als in Deinem
Ursprungsbeitrag.
Wie wäre es, wenn Du Dich mal mit Deiner Aufgabenstellung beschäftigen
würdest und versuchst, herauszufinden, was Du eigentlich erreichen
willst?
> Ergebnis[0] = byte[0] + byte[1] + byte[2];
Wenn du 3 Werte aus einem Zahlenbereich von 0 bis 255 addierst,
kommt ein Ergebnis von 0..765 raus, Ergebnis muß also in der
Lage sein, so grasse Zahlen auch aufzunehmen, also wenigstens
ein short, eventuell ein int oder long, wobei die jeweils
unsigned variante reichen würde, negative Werte können nicht
auftreten.
Wenn Ergebnis[0] ein byte ist, wird eventeull was abgeschnitten,
das tut C# nicht unbemerkt automatisch, sondern nur wenn du das
explizit so sagst:
Ergebnis[0] = (byte)(byte[0] + byte[1] + byte[2]);
Mal so ein Tip: Wenn du statt byte doch int nimmst läuft dein Programm
ein bisschen schneller, da eine nBit Cpu mit einem nBit Wert am
schnellsten rechnen kann (int ist auf einer 32bit CPU ein 32bit interger
und auf 64bit ein 64bit Int). Bei dir wird das warscheinlich egal sein.
Aber wenn dein Programm nur rechnet, bringt es einen kleinen
Geschwindigkeitsbonus.
(genauso wird double schneller gerechnet als float).
-> Lange Rede kurzer Sinn: Speicher ist nicht mehr teuer, nimm einfach
int und du musst dir keine Sorgen über einen Überlauf oder irgendwelchen
Konvertierungen machen.
Ich hab das mal in c# getestet:
Das ganze mit Optimierung:
Bei 1mrd Rechnungen erreicht int seinen Höhepunkt mit ca. 1.5% weniger
Zeit.
Bei 10mrd sind es nur noch ca. 0,05%.
Bei 100mrd sind es -0,2%???.
Ich weiß nicht woran das liegt, aber wenn ich das Programm sowohl bei
int und byte nur bis 100 rechnen lasse und dann wieder von 0 anfange ist
int immer ca. 40% schneller.
Ich hab aber nur hochzählen lassen. Bei Multiplikation müsste das anders
aussehen.
ich würde behaupten das diese 1,5% im Rahmen des scheduling-bedingten
Rauschen liegt.
Zumal der Compiler einen Großteil der Berechnungen optimieren wird, wenn
du direkt davor Konstanten zuweist.
Samuel K. schrieb:> ne nBit Cpu mit einem nBit Wert am> schnellsten rechnen kann (int ist auf einer 32bit CPU ein 32bit interger> und auf 64bit ein 64bit Int).
In c# ist das nicht so dort ist int immer ein 32 Bit Wert.
fz
Ist ja wirklich so. Sry hab ich nicht gewusst. Was macht der Compiler
denn, wenn man auf 64bit compiliert. Das wird doch langsamer.
Vlad Tepesch schrieb:> ich würde behaupten das diese 1,5% im Rahmen des scheduling-bedingten> Rauschen liegt.
Also stimmen tut es aufjedenfall, schließlich steht es in einem ProgBuch
von mir. Aber ich wollte aber nicht mit Zufallszahlen rechnen, da ich
keine Ahnung habe wie diese Random.Next Methode arbeitet. Am Ende wird
sie verschieden schnell augeführt wird.
Wie erklärst du das Verhalten wenn man
if(i > 100)
i = 0;
einfügt, es 40% schneller ist?
Hat jmd vielleicht lust den Test mal in c++ zu machen? Ich hab bisher in
c++ nur spiele mit allegro programmiert. Deswegen weiß ich auch nur wie
man Allegro benutzt, Vectoren und listen nutzt usw. Aber nicht wie man
zeit stoppt.