AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schiebeoperationen

Ein Thema von maynard · begonnen am 17. Feb 2006 · letzter Beitrag vom 18. Feb 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von maynard
maynard

Registriert seit: 22. Jun 2004
Ort: Deutschland
72 Beiträge
 
Delphi 7 Enterprise
 
#1

Schiebeoperationen

  Alt 17. Feb 2006, 18:08
Tach...

ich hänge grade etwas ... ich möchte aus 4 bytes (die jeweils einen Token einer IP enthalten) einen 32Bit - Longw machen.
Allerdings komme ich mit dem schieben nicht ganz klar

Wenn ich also folgende IP habe: 222.111.000.111, dann hatte ich folgendermaßen begonnen
Code:
wert = 222;
wert = (111 << 8);
wert = (0 << 8);
wert = (111 << 8);
aber so haut das eben nicht hin. Leider hab ich bisjetzt keine besonders gute Erklärung im Inet gefunden, kann mir da mal jemand kurz helfen?
"Denkst Du dasselbe wie ich, Pinky?" - "Ich glaube schon, Brain, aber was ist, wenn das Huhn die Strumpfhosen nicht anziehen will...?"
http://www.programmierer-board.de/ph...fc628a1239.jpg
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Schiebeoperationen

  Alt 17. Feb 2006, 18:14
Code:
wert = 222;
wert = (wert << 8) + 111;
wert = (wert << 8);
wert = (wert << 8) + 111;
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#3

Re: Schiebeoperationen

  Alt 17. Feb 2006, 18:16
Ich weiß zwar nicht, welche Programmiersprache das ist, aber wird sich sicher nicht sehr von C# unterscheiden (wenn es das nicht sowieso schon ist ).
Code:
wert = 222 << 24 | 111 << 16 | 111;
In diesem Fall würde auch + statt OR funktionieren, so finde ich es allerdings logischer.

[edit]Roter Kasten, wo bist du ? [/edit]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von maynard
maynard

Registriert seit: 22. Jun 2004
Ort: Deutschland
72 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Schiebeoperationen

  Alt 17. Feb 2006, 18:21
Tach

Verdammt, ich hätte mal lieber den kompletten Text über Bitoperationen und nich nur Schiebeoperatoren lesen sollen, dann wäre ich wohl auch drauf gekommen

Danke ihr habt mir sehr geholfen, schreibe es übrigens in C.

MfG
"Denkst Du dasselbe wie ich, Pinky?" - "Ich glaube schon, Brain, aber was ist, wenn das Huhn die Strumpfhosen nicht anziehen will...?"
http://www.programmierer-board.de/ph...fc628a1239.jpg
  Mit Zitat antworten Zitat
Benutzerbild von maynard
maynard

Registriert seit: 22. Jun 2004
Ort: Deutschland
72 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Schiebeoperationen

  Alt 18. Feb 2006, 15:33
Tach...

Und wie funktioniert der Weg zurück ... also aus einem 32Bit Long 4 Byes zu extrahieren?

MfG
"Denkst Du dasselbe wie ich, Pinky?" - "Ich glaube schon, Brain, aber was ist, wenn das Huhn die Strumpfhosen nicht anziehen will...?"
http://www.programmierer-board.de/ph...fc628a1239.jpg
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: Schiebeoperationen

  Alt 18. Feb 2006, 15:58
Code:
ulong ip = 222ul << 24 | 111ul << 16 | 111ul;
byte[] ipParts = new byte[4];
for (int i = 0; i < 4; i++) {
  // 3 - i oder i, in welcher Reihenfolge man es eben haben will
   ipParts[3 - i] = (byte)(ip >> (8 * i) & 0xff);
  // oder auch
  ipParts[3 - i] = (byte)(ip & 0xff);
  ip >>= 8;
}
Wahrscheinlich nicht direkt nach C übernehmbar, aber die Vorgehensweise sollte erkennbar sein.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#7

Re: Schiebeoperationen

  Alt 18. Feb 2006, 17:00
In C kann man lustige Spielchen treiben (wenn mich nicht alles täuscht):
Code:
void Bla(unsigned long data)
{
  byte* bytes = (byte*)(&data);
  hoechstwertigesBit = bytes[0];
  //...
  niederwertigstesBit = bytes[3];
}
is halt etwas kürzer

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: Schiebeoperationen

  Alt 18. Feb 2006, 17:12
In C gibt es Unions, oder? Wenn ja, wäre das wohl der kürzeste Weg ohne Bit-Shifting .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#9

Re: Schiebeoperationen

  Alt 18. Feb 2006, 17:16
was sind unions?

gibt es nicht sowas wie packed records?
ich hab länger nichts mehr mit C gemacht, aber die Idee mal in Delphi:

Delphi-Quellcode:
TIP = packed record
  I1, I2, I3, I4: Byte;
  end;
PIP = @TIP; //Pointer auf TIP(?)
PInt = @LongInt; //Pointer auf LongInt(?)

procedure IP2Int;
var IP: PIP;
    I: PInt;
begin
  I:=PIP;
end;

procedure Int2IP;
var IP: PIP;
    I: PInt;
begin
  I:=PIP;
end;
oder so:

Delphi-Quellcode:
var
  P: Pointer
  IP: TIP; I: LongInt;
begin
  P:=@I;
  IP:=^P;
//und umkehrt....
{ Prinzip:
  Mach Pointer auf Quelle (egal welche)
  nimm Pointer und dereferenziere ihn in das Ziel rein...
}
  
end;
und noch eine

es gibt in C doch eine funktion die Memory kopiert, oder?

MemCP(@IP, @I, 4); o.ä....
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#10

Re: Schiebeoperationen

  Alt 18. Feb 2006, 17:47
Zitat von glkgereon:
was sind unions?
Die solltest du auch als Delphiprogrammierer kennen.
Delphi-Quellcode:
type
  TIP = record
    case Boolean of
        true: (IP: Cardinal);
        false: (IPParts: Array[0..3] of Byte);
  end;
Zitat:
PIP = @TIP; //Pointer auf TIP(?)
Naja, nicht ganz .
PIP = ^TIP;
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz