Laden...

Was bedeutet bei Arrays die Angabe [1:0] (nicht in C#)?

Erstellt von Tam0r vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.112 Views
T
Tam0r Themenstarter:in
137 Beiträge seit 2008
vor 10 Jahren
Was bedeutet bei Arrays die Angabe [1:0] (nicht in C#)?

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

5.658 Beiträge seit 2006
vor 10 Jahren

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

T
Tam0r Themenstarter:in
137 Beiträge seit 2008
vor 10 Jahren

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}

C
2.122 Beiträge seit 2010
vor 10 Jahren

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

49.485 Beiträge seit 2005
vor 10 Jahren

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

5.658 Beiträge seit 2006
vor 10 Jahren

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