AGB  ·  Datenschutz  ·  Impressum  







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

Längsparität XOR berechnen (BCC)

Ein Thema von Kostas · begonnen am 4. Mai 2010 · letzter Beitrag vom 4. Mai 2010
Antwort Antwort
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.060 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Längsparität XOR berechnen (BCC)

  Alt 4. Mai 2010, 14:58
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
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

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

  Alt 4. Mai 2010, 15:30
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;
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.060 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

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

  Alt 4. Mai 2010, 15:43
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
  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 14:23 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