Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Nibble vom Byte tauschen.

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 17.10.2014, 13:58    Titel: Nibble vom Byte tauschen. Antworten mit Zitat

Hallo, guten Tag.

Ich möchte ein Ascii Rom anfertigen für einen FPGA der ein Textscreen darstellt. Im Rom müssen die Nibble vertauscht werden nach diesem Muster:
----------------------
Procedure.a ReverseNibbles(byte.a)
Protected result.a

result | (byte & %00000001) << 3
result | (byte & %00000010) << 1
result | (byte & %00000100) >> 1
result | (byte & %00001000) >> 3
result | (byte & %00010000) << 3
result | (byte & %00100000) << 1
result | (byte & %01000000) >> 1
result | (byte & %10000000) >> 3

ProcedureReturn result
EndProcedure
------------------------------------------------------

Wie kann man das bitte in Freebasic machen?

Danke.

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Haubitze



Anmeldungsdatum: 14.10.2009
Beiträge: 132

BeitragVerfasst am: 17.10.2014, 15:14    Titel: Antworten mit Zitat

hi arduno,

die befehle die du suchst sind OR,AND,SHL,SHR.

zb koennte das so aussehen,

result=result OR ((byte AND &b00000001) SHL 3)
result=result OR ((byte AND &b00000100) SHR 2)

salute
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 17.10.2014, 15:26    Titel: Antworten mit Zitat

Jup, danke.
Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 19.10.2014, 19:22    Titel: Antworten mit Zitat

Das haut noch nicht hin mit dem Ergebnis.

In Purebasic ist es richtig umgewandelt.
Das Ergebnis ist bei FreeBasic anders(falsch).

Wie geht es da richtig?

Danke.
Gruss

----------------------------
3C 66 6E 6E 60 62 3C 00 Ausgangsbyte

C3 66 67 67 60 64 C3 00 : Richtig mit Purebasic
result | (byte & %00000001) << 3
result | (byte & %00000010) << 1
result | (byte & %00000100) >> 1
result | (byte & %00001000) >> 3
result | (byte & %00010000) << 3
result | (byte & %00100000) << 1
result | (byte & %01000000) >> 1
result | (byte & %10000000) >> 3

C3 E7 E7 E7 E7 E7 E7 E7 Falsch mit Freebasic
result=result OR ((byte_n AND &b00000001) SHL 3)
result=result OR ((byte_n AND &b00000010) SHL 1)
result=result OR ((byte_n AND &b00000100) SHR 1)
result=result OR ((byte_n AND &b00001000) SHR 3)
result=result OR ((byte_n AND &b00010000) SHL 3)
result=result OR ((byte_n AND &b00100000) SHL 1)
result=result OR ((byte_n AND &b01000000) SHR 1)
result=result OR ((byte_n AND &b10000000) SHR 3)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1211
Wohnort: Ruhrpott

BeitragVerfasst am: 20.10.2014, 03:20    Titel: Antworten mit Zitat

Probier es mal damit:

result=(byte_n AND &b00000001) SHL 3
result=result OR ((byte_n AND &b00000010) SHL 1)
result=result OR ((byte_n AND &b00000100) SHR 1)
result=result OR ((byte_n AND &b00001000) SHR 3)
result=result OR ((byte_n AND &b00010000) SHL 3)
result=result OR ((byte_n AND &b00100000) SHL 1)
result=result OR ((byte_n AND &b01000000) SHR 1)
result=result OR ((byte_n AND &b10000000) SHR 3)

oder kürzer:

result=(byte_n AND &b00010001) SHL 3 _
OR ((byte_n AND &b00100010) SHL 1) _
OR ((byte_n AND &b01000100) SHR 1) _
OR ((byte_n AND &b10001000) SHR 3)

Und wenn dein Hex-String immer genau 8 Bytes lang ist, kannst du das Ganze auch elegant in einem Arbeitsgang erledigen:
Code:
Dim As String quelle = Chr(&h3C, &h66, &h6E, &h6E, &h60, &h62, &h3C, &h00)
Dim As ULongInt lresult

lresult = CVLongInt(quelle) 'string in 64-bit-zahl umwandeln
lresult = (lresult AND &b0001000100010001000100010001000100010001000100010001000100010001) SHL 3 _
          Or ((lresult AND &b0010001000100010001000100010001000100010001000100010001000100010) SHL 1) _
          Or ((lresult AND &b0100010001000100010001000100010001000100010001000100010001000100) SHR 1) _
          Or ((lresult AND &b1000100010001000100010001000100010001000100010001000100010001000) SHR 3)
quelle = MkLongint(lresult) '64-bit-zahl in string umwandeln

 'zur Kontrolle
For x As Integer = 0 To Len(quelle) - 1
   Print Hex(quelle[x],2);" ";
Next
Sleep

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
arduno



Anmeldungsdatum: 12.05.2011
Beiträge: 252

BeitragVerfasst am: 20.10.2014, 13:01    Titel: Antworten mit Zitat

Jup danke.

Dein Programm funktioniert wunderbar.

Gruss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz