Autor Beitrag
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Do 22.11.07 12:58 
user profile iconfuba hat folgendes geschrieben:
...
// mein zusatz
E := A shl 4 // müsste dann 16 sein oder?
[/delphi]

Richtig!
Schreibfehler: na klar, muss 4 sein
user profile iconfuba hat folgendes geschrieben:
--

und das OR ist im prinzip ne einfache addition oder kann ich z.b:

$1000 or 10 = $1000 +$10 ?

oder muss ich das wie ein einfaches PLUS handhaben, also:

$1000 or $10 = $1000 + $10 ?

Bitweise schon, in anderen Fällen gibt es Probleme
$10+$10 = $20
$10 or $10 = $10

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
fuba Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125

Win7
D7 Ent.
BeitragVerfasst: Do 22.11.07 13:58 
hmm, glaub das mit OR muss ich mir noch genauer ansehen, aber da ist eine andere geschichte :)

Danke dir vielmals für deine hilfe!
TProgger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148

XP
D6, D2007 prof
BeitragVerfasst: Do 22.11.07 14:09 
ach du willst nur Byteweise rechnen?
Dann zerleg den String in Zweiergruppen, nimm die zwei Zeichen die du willst, rechne sie mit Zahl:=IntToStr('$'+Zeichen) in eine Zahl um, rechne deinen Wert dazu, wenn das ergebnis grüßer 255 ist, subtrahiere einfach 256, dann wieder IntToHex(Zahl,2) und füg sie wieder ein. Das müsste genau das machen, was du willst ;)

_________________
Wir haben für jede Lösung das richtige Problem ;)
fuba Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125

Win7
D7 Ent.
BeitragVerfasst: Do 22.11.07 15:33 
user profile iconTProgger hat folgendes geschrieben:
ach du willst nur Byteweise rechnen?
Dann zerleg den String in Zweiergruppen, nimm die zwei Zeichen die du willst, rechne sie mit Zahl:=IntToStr('$'+Zeichen) in eine Zahl um, rechne deinen Wert dazu, wenn das ergebnis grüßer 255 ist, subtrahiere einfach 256, dann wieder IntToHex(Zahl,2) und füg sie wieder ein. Das müsste genau das machen, was du willst ;)


das mache ich ja indem ich den hex in array of byte lade.
Dort kann ich dann mit jeder 2er gruppe einzelln rechnen und dann gebe ich das wieder als ganzen hex aus.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
var
  a: array of byte;
  Dec, Len, j: integer;
  HexBH: string;

...

hex:='0001FA11';

Len := Length(Hex) div 2;
SetLength(a, Len+1);

// Hex in array übertragen
for j:=1 to Len do
begin
  HexBH := '$'+copy(Hex, j*2-12);
  a[j] := byte(StrToInt(HexBH));
end;

// Rechenvorgang in 2er gruppe
a[3] := a[3] + $07;                                                     
                                                                                
// Array in integer umwandeln
for j:= low(a) to high(a) do
begin
  dec := (dec shl 8or a[j];
end;

// und wieder in Hex umwandeln
hex:=IntToHex(Dec, 2);


oder gibts da ne einfachere methode?

Ich mein "zerleg den String in Zweiergruppen, nimm die zwei Zeichen die du willst, rechne sie mit" ist ja schön gesagt, nur wie mache ich das?

00011111 in 2er gruppen zerlegen -> 00 01 11 11 aber wie?
und wenn ich dann die 2er gruppen habe, wie fürge ich diese wieder in einen ganzen Hex?

also kurz:
0001FA11 -> 00 01 FA 11 -> 00 01 (FA+07) 11 -> 00 01 01 11 -> 00010111

wenns dafür ne einfache methode gibt ... und du die kennst ... währe das natürlich echt toll :)
TProgger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148

XP
D6, D2007 prof
BeitragVerfasst: Do 22.11.07 15:59 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
/ Rechenvorgang in 2er gruppe
a[3] := a[3] + $07;                                                     
                                                                                
// Array in integer umwandeln
for j:= low(a) to high(a) do
begin
  dec := (dec shl 8or a[j];
end;

// und wieder in Hex umwandeln
hex:=IntToHex(Dec, 2);


Warum nicht so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var
  Z: Integer;
  hex: String;
// Zweiergruppe in Zahl umwandeln

// und dann :
ResultString := a[0]+a[1]+a[2]+a[3]...
Z:=StrToInt('$'+a[3]);                                                     
                                                                                
// Dazuzählen
Z := Z + DeineZahl;
if Z > 255 then Z := Z - 256;

// und wieder in Hex umwandeln
hex:=IntToHex(Z, 2);
a[3]:=hex;


So würde ich das machen, ganz ohne Schieberei :)

_________________
Wir haben für jede Lösung das richtige Problem ;)
fuba Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 125

Win7
D7 Ent.
BeitragVerfasst: Do 22.11.07 16:41 
user profile iconTProgger hat folgendes geschrieben:

Warum nicht so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var
  Z: Integer;
  hex: String;
// Zweiergruppe in Zahl umwandeln

// und dann :
ResultString := a[0]+a[1]+a[2]+a[3]...
Z:=StrToInt('$'+a[3]);                                                     
                                                                                
// Dazuzählen
Z := Z + DeineZahl;
if Z > 255 then Z := Z - 256;

// und wieder in Hex umwandeln
hex:=IntToHex(Z, 2);
a[3]:=hex;


So würde ich das machen, ganz ohne Schieberei :)


hmm, im großen und ganzen speicherst du dann den Hex in ein array of string oder?

wenn ja, könnte man es auch so machen:

mein Anfangs Hex = 00011111
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var
  Hex, Hex2: string;
  z: integer;
begin
  Hex:='00011111';
  z:=StrToInt('$' + Hex[5] + Hex[6]);

  z := z - $17;
  if z > 255 then z:= z - 256;
  if z < 0 then z:= z + 256;

  Hex2:=IntToHex(z, 2);

  Hex[5]:=Hex2[1];
  Hex[6]:=Hex2[2];
end;

mein End Hex = 00010122

hmm ... verdammt, warum bin ich da nicht früher draufgekommen, also sind arrays eigentlich garnicht nötig....

Aber danke für deine rechenformal, die hat mir da sehr geholen, sonnst könnte ich das garnicht so machen ^_^


// edit

obwohl ich gerade bemerkt habe:

00 01 11 11

diese $11 - $17 ergibt -> FF FF FF FA und das auch mit deiner methode

habe das aber auch schon im obrigen code gelöst, hoffe das stimmt so.