AGB  ·  Datenschutz  ·  Impressum  







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

bit <---> word

Ein Thema von TeronG · begonnen am 16. Nov 2005 · letzter Beitrag vom 31. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#1

bit <---> word

  Alt 16. Nov 2005, 14:40
Hi
ich wollte/musste mal (16) bits in ein Word umrechnen und umgekehrt .. hab mir auch was zusammengebastelt, daß recht gut funtzt ..
Jetzt wollt ich eigentlich nur noch wissen, ob es in Delphi evtl. schon was vorgefertigtes/besseres gegeben hätte bzw. giebt?


Mein Codeschnipsel ^^
Delphi-Quellcode:
procedure WordToBit(eingang:Word;var bit: array of boolean);
var
  I : Integer;
begin
  for i := 0 to 15 do bit[i] := ((eingang div trunc(Power(2,i)))mod 2 > 0);
end;

procedure BitToWord(bit : array of boolean;var ausgang : Word);
var
  i : integer;
begin
  ausgang := 0;
  for I := 0 to 15 do if bit[i] then ausgang := ausgang + trunc(power(2,i));
end;
btw: Warum zum Geier kann ich in der Procedurendeklaration nicht array[0..15] of machen
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: bit <---> word

  Alt 16. Nov 2005, 14:44
Zitat:
Warum zum Geier kann ich in der Procedurendeklaration nicht array[0..15] of machen
Das ginge nur mit einem neuen Typ...
type myType = array[0..15]of boolean; Am sonsten ist es auch besser von der Geschwindigkeits her, array of TYPE zu schreiben.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: bit <---> word

  Alt 16. Nov 2005, 14:46
eine fertige Funktion kenne ich da nicht aber "mod", "div", "trunc" und "power" sollte man da nicht nehmen, das sind riesen performancekiller. Warum verwendest du nicht die logichern Operatoren (and, or, xor, not)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: bit <---> word

  Alt 16. Nov 2005, 14:47
Das geht aber viel einfacher

Delphi-Quellcode:
function BitsToInt(Bits: array of Boolean): Integer;
var i: Integer;
begin
  Result := 0;
  for i := 0 to High(Bits) do
  begin
    if Bits[i] then
      Result := Result shl 1 or 1
    else
      Result := Result shl 1;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#5

Re: bit <---> word

  Alt 16. Nov 2005, 14:50
@Sniper: klar so sollts gehen ^^
Zitat von SirThornberry:
eine fertige Funktion kenne ich da nicht aber "mod", "div", "trunc" und "power" sollte man da nicht nehmen, das sind riesen performancekiller. Warum verwendest du nicht die logichern Operatoren (and, or, xor, not)
hmm .. ka .. muss ich mich morgen mal reindenken (nehme aber auch fertige functionen )
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#6

Re: bit <---> word

  Alt 16. Nov 2005, 14:54
Ach, ja, ich hab IntToBit vergessen

Delphi-Quellcode:
function IntToBit(Int: Integer): TBitArray {array of Boolean};
var i: Integer;
begin
  SetLength(Result, 32);
  for i := 0 to 31 do
    Result[i] := (Int and (1 shl i)) <> 0;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: bit <---> word

  Alt 16. Nov 2005, 14:55
// ich werf hier nochmal meine vorschläge in den raum...

ginge das nicht auch so per Zeigerarithmetik bzw.Lookup-Tabelle?

Delphi-Quellcode:
// word to bit
var P:Pointer;

P := @SomeWord;
for i := 0 to 15 do
  begin
   bits[i] := boolean(P);
   Inc(P);
  end;

//andersrum:
//das hier sind die wertigkeiten, evtl. kommts noch auf LSA/MSA first an, muss man sehen, wie das im word liegt.
const Values = array[0..15] of integer =
({....}32,16,4,2,1);

for i := 0 to 15 do
 begin
  word := word + Values(i);
 end;
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#8

Re: bit <---> word

  Alt 16. Nov 2005, 15:02
Das geht natürlich auch, aber die Zeiger haben den Nachteil, das man sie nicht einfach auf .net portieren kann (und die sowieso ein wenig komisch im Umgang sind), und die Lookuptabelle ist recht schwer zu warten, ums mal so zu sagen. Ich persönlich bevorzuge einfachen und schnell verständlichen Code, deiner fällt da nur bedingt rein
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: bit <---> word

  Alt 16. Nov 2005, 15:04
Also wenn du schon die zwei Bytes hast, dann kannst du MSDN-Library durchsuchenMAKEWORD benutzen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Grishnak
Grishnak

Registriert seit: 15. Sep 2005
Ort: Neu-Ulm
111 Beiträge
 
RAD-Studio 2009 Arc
 
#10

Re: bit <---> word

  Alt 16. Nov 2005, 15:05
Es gibt die TBits-Klasse. Habe ich zwar noch nie benutzt - und weiß deshalb auch nicht, was sie alles kann -, aber vielleicht kannst du was damit anfangen!
Mach' etwas idiotensicher und irgendjemand erfindet einen besseren Idioten!
  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 06:11 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