AGB  ·  Datenschutz  ·  Impressum  







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

Bits auslesen?

Ein Thema von Z4ppy · begonnen am 19. Nov 2008 · letzter Beitrag vom 22. Nov 2008
Antwort Antwort
Z4ppy

Registriert seit: 25. Apr 2008
269 Beiträge
 
Delphi 7 Enterprise
 
#1

Re: Bits auslesen?

  Alt 21. Nov 2008, 23:47
So, nochmal
Hab nämlich ein seltsames Problem. Ich hab nun eine Procedur GetBits, der übergebe ich das Byte X und das array, in das sie die Bits schreiben soll (als integer)...

Delphi-Quellcode:
procedure GetBits(X:Byte;Target:array of integer);
var i:integer;
begin
  for i:=0 to 7 do
    if(X and (1 shl i))=(1 shl i) then Target[7-i]:=1
    else Target[7-i]:=0;
end;
Dann ruf ich das so auf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var tmp:Array[0..7]of integer;
    i:integer;
begin
  GetBits(ord(Edit1.Text[1]),tmp);
  Edit2.Text:='ord: '+inttostr(ord(Edit1.Text[1]))+' | Bit: ';
  for i:=0 to 7 do Edit2.Text:=Edit2.Text+inttostr(tmp[i]);
end;
Das gibt aber das hier:
Code:
ord: 97 | Bit: 43214167772161242548211761055642072234358324


Wenn ich mal nach jeder einzelnen Integer leerschläge einfüge, sieht das so aus:
Code:
ord: 97 | Bit: 43 2 14 16777216 1242548 2117610556 4207223 4358324
Abgesehen davon, dass die 6. Zahl an der oberen Grenze von Integer kratzt, ist das natürlich völlig normal und genau das, was ich wollte

Nun, zum Test hab ich dann mal das gemacht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var tmp:Array[0..7]of integer;
    i:integer;
begin
  for i:=0 to 7 do
    if(ord(Edit1.Text[1]) and (1 shl i))=(1 shl i) then tmp[7-i]:=1
    else tmp[7-i]:=0;
  Edit2.Text:='ord: '+inttostr(ord(Edit1.Text[1]))+' | Bit: ';
  for i:=0 to 7 do Edit2.Text:=Edit2.Text+inttostr(tmp[i]);
end;
Und siehe da, es kommt das Richtige raus:
Code:
ord: 97 | Bit: 01100001
Kann mir das jemand erklären? Der Code zum Auslesen der Bits ist ja absolut identisch...

MfG Z4ppy

€dit: So, nochmal Direktvergleich, dann wirds nämlich noch seltsamer
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var tmp,tmp2:Array[0..7]of integer;
    i:integer;
begin
  for i:=0 to 7 do
    if(ord(Edit1.Text[1]) and (1 shl i))=(1 shl i) then tmp[7-i]:=1
    else tmp[7-i]:=0;
  Edit2.Text:='ord: '+inttostr(ord(Edit1.Text[1]))+' | Bit: ';
  for i:=0 to 7 do Edit2.Text:=Edit2.Text+inttostr(tmp[i]);

  GetBits(ord(Edit1.Text[1]),tmp2);
  Edit3.Text:='ord: '+inttostr(ord(Edit1.Text[1]))+' | Bit: ';
  for i:=0 to 7 do Edit3.Text:=Edit3.Text+inttostr(tmp2[i]);
end;
Inhalt Edit2:
Code:
ord: 97 | Bit: 01100001
Inhalt Edit3:
Code:
ord: 97 | Bit: 00000000
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:11 Uhr.
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