Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
arduno
Anmeldungsdatum: 12.05.2011 Beiträge: 252
|
Verfasst am: 17.10.2014, 13:58 Titel: Nibble vom Byte tauschen. |
|
|
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 |
|
|
Haubitze
Anmeldungsdatum: 14.10.2009 Beiträge: 132
|
Verfasst am: 17.10.2014, 15:14 Titel: |
|
|
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 |
|
|
arduno
Anmeldungsdatum: 12.05.2011 Beiträge: 252
|
Verfasst am: 17.10.2014, 15:26 Titel: |
|
|
Jup, danke.
Gruss |
|
Nach oben |
|
|
arduno
Anmeldungsdatum: 12.05.2011 Beiträge: 252
|
Verfasst am: 19.10.2014, 19:22 Titel: |
|
|
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 |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 20.10.2014, 03:20 Titel: |
|
|
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 |
|
|
arduno
Anmeldungsdatum: 12.05.2011 Beiträge: 252
|
Verfasst am: 20.10.2014, 13:01 Titel: |
|
|
Jup danke.
Dein Programm funktioniert wunderbar.
Gruss |
|
Nach oben |
|
|
|