[Gelöst] C/SIDE - Integerzahl binär in 2 Bytes unterzubringe

14. Mai 2011 12:41

Hallo liebe Forum-Mitglieder,

ich befasse mich seit einiger Zeit mit folgender Problematik:

eine beliebige Integerzahl jedoch nicht größer als 9999 soll in eine binäre Variable, die 2 Byte groß ist, geschrieben werden.
Die Integerzahl soll halbbyteweise von rechts nach links belegt werden.

Beispielsweise die Integerzahl 125

--------first byte-------- ------second byte-------
halfbyte1 halfbyte2 halfbyte3 halfbyte4
0 1 2 5
Die Darstellung ist einwenig verschoben. Die einzelnen Zahlen gehören unter die halfbytes Spalten

Ich muss hier jedoch anmerken, dass mir bislang die binäre Programmierung, ob in C/SIDE oder anderen prog.sprachen genzlich verborgen blieb.
Hat jemand vlt. eine Idee wo ich ansetzen könnte, oder sogar ein Codeschnipsel ?

Mit besten Grüßen
der duk
Zuletzt geändert von dadelduk am 16. Mai 2011 11:10, insgesamt 1-mal geändert.

Re: C/SIDE - Integerzahl binär in 2 Bytes unterzubringen.

14. Mai 2011 12:58

Herzlich willkommen bei uns!

Deine eigentlich Frage kann ich dir leider nicht beantworten, aber einen Tipp habe ich:

dadelduk hat geschrieben:Die Darstellung ist einwenig verschoben. Die einzelnen Zahlen gehören unter die halfbytes Spalten

Schreibe fest positionierten Text (und allgemein jeden Quelltext) zwischen so genannte Code-Tags, beispiel
[ code]Dein Quelltext[ /code]
(Ohne die Leerzeichen hinter dem "[")

Ergibt (nach ein bisschen Bastelei):

Code:
--------first byte--------    ------second byte-------
halfbyte1     halfbyte2     halfbyte3     halfbyte4
    0             1             2             5

Re: C/SIDE - Integerzahl binär in 2 Bytes unterzubringen.

14. Mai 2011 13:15

Hallo Natalie,

herzlichen Dank für Deine prompt schnelle Antwort und den Tipp. Den werde ich mir merken.

Mit besten Grüßen
der duk

Re: C/SIDE - Integerzahl binär in 2 Bytes unterzubringen.

15. Mai 2011 22:57

Hallo,

was du erzeugen möchtest, ist anscheinend eine BCD- Zahl.

Das dürfte ungefähr so funktionieren (hab's nicht getestet. Evtl. musst du das Ergebnis der Division noch abrunden mit ROUND(val /power(10,i),'<',1))
Alle Variablen sind Integer;
Code:
BCD:=0;
for i := 3 downto 0 do
  BCD += VAL /power(10,i)*power(2,i*4);


Gruß, Fiddi

[Gelöst] C/SIDE - Integerzahl binär in 2 Bytes unterzubringe

16. Mai 2011 11:07

Hallo Fiddi,

das sieht super aus.
Mache mich gleich "ans Bauen" :-D

Vielen Dank.
der duk

Re: [Gelöst] C/SIDE - Integerzahl binär in 2 Bytes unterzubr

16. Mai 2011 12:08

Hallo dadelduk,

wenn man nicht mit MODULO oder DIV arbeiten möchte, könnte man sich die Zahlen auch in Text konvertieren und dann auf die Ziffern zugreifen. Ich glaube beim obigen Beispiel wäre diese Rundung auf Ziffern von 1 bis 9 noch nötig.

Code:
Zahl:=9999;
ZahlString:=FORMAT(Zahl,4,'<Integer,4><Filler Character,0>');
FOR i := 4 DOWNTO 1 DO
  IF EVALUATE(Ziffer, FORMAT(ZahlString[i])) THEN BCD+=POWER(2,(4-i)*4)*Ziffer;
MESSAGE(FORMAT(BCD));


mfg,
winfy

Re: [Gelöst] C/SIDE - Integerzahl binär in 2 Bytes unterzubr

16. Mai 2011 13:18

Hallo,

sorry bin heute erst dazu gekommen das zu testen. Leicht geänderter Code ohne ROUND

Code:
BCD:=0;
val :=8000;
for i := 3 downto 0 do begin
  posval := val div Power(10,i);
  BCD += posval * power(2,i*4);
  val -= posval * power(10,i);
end;


oder wenn es etwas schneller sein darf:

Code:
bins[1] := 1;
bins[2] :=16;
bins[3] :=128;
bins[4] :=256;
tens[1] :=1;
tens[2] := 10;
tens[3] := 100;
tens[4] :=1000;

BCD:=0;
for i := 4 downto 1 do begin
  posval := val div tens[i];
  BCD += (posval * bins[i]);
  val -= (posval * tens[i]);
end;


Gruß, Fiddi