Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Längsparität XOR berechnen (BCC) (https://www.delphipraxis.net/151061-laengsparitaet-xor-berechnen-bcc.html)

Kostas 4. Mai 2010 14:58


Längsparität XOR berechnen (BCC)
 
Hallo Zusammen,

mit Bitschiebereinen habe ich recht wenig zu tun.
Für eine RS232 Kommunikation muss ich eine Checksum über einen beliebig langen String bilden.
Möglicherweise hat das schon mal jemand gemacht und kann mir damit aushelfen.

Es werden genau sieben Bits durch den kompletten String Quer mit XOR verknüpft.
Die Bits müssen also aufgefüllt werden. Aus <ETX> = $3 = 11 wird also 0000011

Delphi-Quellcode:
Ein Beispiel:
Der String AB34<ETX> ergibt als BCC $7
  A B 3  4  <ETX>  BCC
  1  1  0  0    0      0
  0  0  1  1    0      0
  0  0  1  1    0      0
  0  0  0  0    0      0
  0  0  0  1    0      1
  0  1  1  0    1      1
  1  0  1  0    1      1


Der String
01#DR#1#Testdruck#<ETX> ergibt nach dem Muster ein $78

Dankeschon
Gruß Kostas

gammatester 4. Mai 2010 15:30

Re: Längsparität XOR berechnen (BCC)
 
Ich nehme man, daß Du mit 8-Bit-Zeichen arbeitest. Dann xorst Du einfach alle Zeichen und maskierst die 7 Bit (falls alle Zeichen nur 7 Bit haben, ist das eigentlich überflüssig):
Delphi-Quellcode:
function bcc(s: ansistring): byte;
var
  t,i: integer;
begin
  t := 0;
  for i:=1 to length(s) do t := t xor ord(s[i]);
  bcc := t and $7f;
end;

Kostas 4. Mai 2010 15:43

Re: Längsparität XOR berechnen (BCC)
 
Zitat:

Zitat von gammatester
Ich nehme man, daß Du mit 8-Bit-Zeichen arbeitest. Dann xorst Du einfach alle Zeichen und maskierst die 7 Bit (falls alle Zeichen nur 7 Bit haben, ist das eigentlich überflüssig):
Delphi-Quellcode:
function bcc(s: ansistring): byte;
var
  t,i: integer;
begin
  t := 0;
  for i:=1 to length(s) do t := t xor ord(s[i]);
  bcc := t and $7f;
end;


Hallo gammatester,

volltreffer, genau das ist es. Im String können teoretisch alle ASCII Zeichen von 1 bis 127 vorkommen.

Tausend Dank gammatester Du hast mir sehr weitergeholfen.

Gruß Kostas


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 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