Forums Neueste Beiträge
 

mit Bytes rechnen

13/05/2015 - 10:52 von Stefan | Report spam
Hallo,

ein Kollege von mir versucht ein paar Delphi Codeschnipsel in Python
umzusetzen. Da ich selber keine Ahnung von Python habe, suche ich hier
nach Tipps, die ich weitergeben kann.

Der Kollege sagte mir, das es in Python den Datentyp byte nicht gibt,
wohl aber Bytearray.

Es geht um eine Checksummenberechnung (Nullsumme).

In Delphi / Pascal sieht das folgendermaßen aus:

procedure sendestring(s:string);
// hànge an Sting s eine Checksumme an und sende das raus
var c : byte;
i : integer;
begin
// s := 'Hello World'; // Beispieltext
c := 0; // Anfangswert der Checksumme
for i := 1 to length(s) do c := c - ord(s[i]);
// die Ascii-codes nacheinander subtrahieren
s := s + char(c); // und dann an den String anhàngen
sende(s); // String + Checksumme senden
end;

Die Checksumme kann dann folgendermaßen geprüft werden:

function checkechecksumm(s:string):boolean;
var c : byte;
i : integer;
begin
c := 0; // Anfangswert auf 0
for i := 1 to length(s) do c := c + s[i]; // alle Bytes addieren
result := (c = 0); // wenn Summe = 0, dann ok
end;

So wie ich das verstanden habe, kann ich in Python nicht mit Bytes
rechnen, zumindest nicht mit einzelnen Bytes. Könnte ich aber dasselbe
erreichen, wenn ich ein einzelnes Element aus einem Bytearray verwende?

also ungefàhr so:

c = bytes([0]) # array mit nur einem Element
c[0] = 0

for x in range (0,4)
c[0] = c[0] - s[x]

Gruß

Stefan
 

Lesen sie die antworten

#1 Diez B. Roggisch
13/05/2015 - 11:21 | Warnen spam
Hallo Stefan,

ohne konkrete Rechenbeispiele kann ich das nicht validieren ob’s da ggf. Probleme mit Vorzeichen gibt - aber fuer sowas reicht der Modulooperator eigentlich aus:

s = "hallo stefan"
s + chr(sum(ord(c) for c in s) % 0xff)






'hallo stefan\xb5’

Diez

On 13 May 2015, at 10:52, Stefan wrote:

Hallo,

ein Kollege von mir versucht ein paar Delphi Codeschnipsel in Python umzusetzen. Da ich selber keine Ahnung von Python habe, suche ich hier nach Tipps, die ich weitergeben kann.

Der Kollege sagte mir, das es in Python den Datentyp byte nicht gibt, wohl aber Bytearray.

Es geht um eine Checksummenberechnung (Nullsumme).

In Delphi / Pascal sieht das folgendermaßen aus:

procedure sendestring(s:string);
// hànge an Sting s eine Checksumme an und sende das raus
var c : byte;
i : integer;
begin
// s := 'Hello World'; // Beispieltext
c := 0; // Anfangswert der Checksumme
for i := 1 to length(s) do c := c - ord(s[i]);
// die Ascii-codes nacheinander subtrahieren
s := s + char(c); // und dann an den String anhàngen
sende(s); // String + Checksumme senden
end;

Die Checksumme kann dann folgendermaßen geprüft werden:

function checkechecksumm(s:string):boolean;
var c : byte;
i : integer;
begin
c := 0; // Anfangswert auf 0
for i := 1 to length(s) do c := c + s[i]; // alle Bytes addieren
result := (c = 0); // wenn Summe = 0, dann ok
end;

So wie ich das verstanden habe, kann ich in Python nicht mit Bytes rechnen, zumindest nicht mit einzelnen Bytes. Könnte ich aber dasselbe erreichen, wenn ich ein einzelnes Element aus einem Bytearray verwende?

also ungefàhr so:

c = bytes([0]) # array mit nur einem Element
c[0] = 0

for x in range (0,4)
c[0] = c[0] - s[x]

Gruß

Stefan









_______________________________________________
python-de maillist -
https://mail.python.org/mailman/listinfo/python-de

Ähnliche fragen