Hallo Gemeinde,
ich will eine eigene Anwendung für eine IP - Steckdose programmieren. Eigentlich relativ einfach aber
Bei der SDK sind mir folgende Zeilen unklar.
res[1:0]=((task[0]^key[2])*key[0])^(key[6]|(key[4]<<8))^task[2] (unsigned
multiply);
res[3:2]=((task[1]^key[3])*key[1])^(key[7]|(key[5]<<8))^task[3] (unsigned
multiply);
res = Byte[4]
task =Byte[4]
key = Byte[8]
Leider vestehe ich die Aussage res[1:0] nicht. Da ich res zurück senden muss müsste es sich um:
res[0] res[1] res[2] und res[3] handeln. Allerdings meckert C# bei dem Code das er Integer nicht in Byte Array umwandeln kann.
Ich denke das Beispiel bezieht sich auf c++ oder so aber auch bei c++ habe ich keine Aussage für 1:0 gefunden.
Z.b. müsste für
task[0] = 0x81;
task[1] = 0xAD;
task[2] = 0x61;
task[3] = 0x8E;
und
key[0] = 0x20;
key[1] = 0x20;
key[2] = 0x20;
key[3] = 0x20;
key[4] = 0x20;
key[5] = 0x20;
key[6] = 0x20;
key[7] = 0x31;
folgendes rauskommen:
res[0] = 0x90
res[1] = 0x3E
res[2] = 0x0E
res[3] = 0x31
Leider bin ich mit Bytes nicht so bewandert kann mir jemand da weiter helfen ?
MfG
tam0r
Hi Tam0r,
Allerdings meckert C# bei dem Code das er Integer nicht in Byte Array umwandeln kann.
Wenn du zwei Bytes miteinander multiplizierst, ist das Ergebnis ein Integer. Willst du den Wert dann in ein Byte-Array speichern, mußt du ihn vorher wieder in ein Byte umwandeln. Allerdings kann ich nicht erkennen, wo du einen Interger-Wert in ein Byte-**Array **umwandeln willst.
Ich denke das Beispiel bezieht sich auf c++ oder so
Es wird sich doch herausfinden lassen, für welche Sprache der SDK gemacht wurde...
Christian
Weeks of programming can save you hours of planning
MrSparkle
vielen Dank für die Antwort.
Leider steht in der SDK nicht für welche Sprache es sich handelt. Bzw. es ist ein allgemeines Beispiel wie man vorgehen muss.
Auch wenn ich den Integer wert in ein Array umwandele kommt bei mir ein anderes Ergebnis raus 😦
BitConverter.GetBytes(13409)
Bringt bei mir folgendes Array: {97,52,0,0}
und
BitConverter.GetBytes(12575)
Bringt bei mir folgendes Array: {31,49,0,0}
Das ist "little endian", also niederwertigstes Byte zuerst. Das passt so schon.
97,52, 0, 0 in Hex wäre 0x61, 0x34, 0, 0 und das ergibt zusammengesetzt (von hinten her) 0x00003461 = 13409
Hallo Tam0r,
ich denke, dass es die gesuchte Syntax weder bei C# noch bei C/C++ gibt. Das muss irgendeine andere Programmiersprache sein.
Anderseits scheint du ja zu wissen, welche Ausgabe du bei welcher Eingabe haben willst. Es sollte also möglich sein, das in C# zu programmieren, auch ohne zu wissen, was die Syntax in dem Originalcode bedeutet.
herbivore
Ich würde sagen, chilic hat die Antwort schon gegeben. Die Angabe [1:0] bzw. [3:2] steht für die Byte-Reihenfolge. Genaueres sagt sicherlich die entsprechende Doku...
Christian
Weeks of programming can save you hours of planning