Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Countbits fuer intel und non-intel bits. (https://www.delphipraxis.net/38170-countbits-fuer-intel-und-non-intel-bits.html)

Diablo9876 15. Jan 2005 18:31


Countbits fuer intel und non-intel bits.
 
Hallo zusammen, habe folgenden code, jetzt moechte ich den aber so umschreiben das er fuer intel und non-intel(BIG-endian) bits zu gebrauchen ist.
Auserdem moechte ich eine Bitrange einbauen: Startbit --> Endbit statt 0 -- > Size.
Hat jemand irgendeine Ahnung wie?
Delphi-Quellcode:
function CountBitsSet(P: Pointer; Count: Cardinal): Cardinal;
const
  lu : packed array[0..15] of Byte = (0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4);
var
  b: Byte;
begin
  Result := 0;
  while Count > 0 do
  begin
    b := PByte(P)^;
    // lower Nibble
    Inc(Result, lu[b and $0F]);
    // upper Nibble
    Inc(Result, lu[b shr 4]);

    Dec(Count);
    Inc(PByte(P));
  end;
end;
Schonmal recht herzlichen Dank.
Gruss Diablo

Tubos 15. Jan 2005 19:19

Re: Countbits fuer intel und non-intel bits.
 
Zitat:

jetzt moechte ich den aber so umschreiben das er fuer intel und non-intel(BIG-endian) bits zu gebrauchen ist.
Alle Prozessoren, mit denen deine Delphi Programme ausgeführt werden (also nur Intel- und AMD-Prozessoren) sind Little-Endian, du musst dich deshalb nicht darum kümmern.

Diablo9876 15. Jan 2005 19:23

Re: Countbits fuer intel und non-intel bits.
 
Hi, der code ist Bestandteil eines eigenen torrent clients und sollte auch auf nicht Windows Machinen laufen also zb ein MAC.

Tubos 15. Jan 2005 19:28

Re: Countbits fuer intel und non-intel bits.
 
Heißt das, du überträgst Daten übers Internet?
Und wie wird das übertragen? Als Strings?

Diablo9876 15. Jan 2005 19:51

Re: Countbits fuer intel und non-intel bits.
 
Die Function die du siehst ist dafuer gedacht zu pruefen ob eine Datei fertig gestellt wurde.
Jetzt moechte ich sie umschreiben fuer Intel 76543210 und non-intel 01234567 bits.
Kleinen Ansatzcode wuerde helfen.

Tubos 15. Jan 2005 20:34

Re: Countbits fuer intel und non-intel bits.
 
Zitat:

Die Function die du siehst ist dafuer gedacht zu pruefen ob eine Datei fertig gestellt wurde.
Aber das ist doch was lokales, oder muss man dabei Daten versenden?

tommie-lie 15. Jan 2005 20:49

Re: Countbits fuer intel und non-intel bits.
 
Du hast doch schon ganz richtig erkannt, daß es CPU-Sache ist, du brauchst dich also nur darum zu kümmern, in welcher Form die Daten ankommen. Wenn du einen LongWord in Delphi hast und schnappst dir dessen Memory-Dump ist die Darstellung byteweise (nicht bit-weise) von links nach rechts (0d1 ist also 0x01000000). Trotzdem werden Rechenoperationen so durchgeführt, als ob die Byte in der "richtigen" Reihenfolge vorliegen würden. Ein SHL um 8 Bit würde also 0x00010000 ergeben. So ist das in den anderen mir bekannten Programmiersprachen auch. Auf einem Prozessor mit "richtiger" Bytereihenfolge sollte das genauso transparent sein.
Es kommt also nur darauf an, wie die Daten vorliegen und wie du sie einliest. Liegen sie in einem Stream im BigEndian-Format vor und du liest sie einfach blind in einen LongWord ein, dann kriegst du auf LittleEndian-Systemen Probleme und musst erst die Reihenfolge der Bytes umkehren (am eifnachsten wohl mit einem einfachen BSWAP).

Diablo9876 15. Jan 2005 21:09

Re: Countbits fuer intel und non-intel bits.
 
Und wie koennte so ne Bitswap function aussehen deiner Meinung nach?
Waere nett wen mir jemand auf dem Weg helfen wuerde ist wichtig.

Gruss Diablo

tommie-lie 15. Jan 2005 21:11

Re: Countbits fuer intel und non-intel bits.
 
Für 32bit-Longwords?
Delphi-Quellcode:
function SwapLong(aValue: LongWord): LongWord; assembler;
asm
  BSWAP EAX;
end;

Muetze1 15. Jan 2005 21:37

Re: Countbits fuer intel und non-intel bits.
 
Moin!

@tommie-lie: Hmm, wird aber wohl Probleme auf einem Mac machen, oder?

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz