AGB  ·  Datenschutz  ·  Impressum  







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

Ord() Funktion unter Android

Ein Thema von Stewag · begonnen am 10. Mai 2019 · letzter Beitrag vom 16. Mai 2019
Antwort Antwort
Stewag

Registriert seit: 12. Jun 2008
175 Beiträge
 
Delphi 12 Athens
 
#1

Ord() Funktion unter Android

  Alt 10. Mai 2019, 13:26
Bei der Portierung dieses Codes für eine einfache Verschlüsselung von Windows auf Android habe ich das Problem, dass unter Android ein komplett anderes Ergebnis geliefert wird.
Hängt das vielleicht damit zusammen, das Android eine andere Codepage verwendet?

Wie kann ich erreichen, das unter Android dasselbe Ergebnis wie unter Windows geliefert wird?

Code:
Inword := 'Android';

for i := 1 to length(Inword) do
    Outword := Outword + char(ord(Inword[i])-i);

showmessage(Outword) // liefert "@lanjc]" unter Windows und "mbokd^_" unter Android
Ich setze Delphi 10.3 Community ein.
Steffen
  Mit Zitat antworten Zitat
jottkaerr

Registriert seit: 2. Jul 2007
Ort: Tuttlingen
81 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: Ord() Funktion unter Android

  Alt 10. Mai 2019, 14:29
Könnte es sein, dass die Indexierung von Strings unter Android bei 0 beginnt?
Jürgen Krämer
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us. (Calvin)
  Mit Zitat antworten Zitat
Stewag

Registriert seit: 12. Jun 2008
175 Beiträge
 
Delphi 12 Athens
 
#3

AW: Ord() Funktion unter Android

  Alt 10. Mai 2019, 14:45
... mmmh, du meinst so:

Code:
for i := 0 to length(Inword)-1 do
    Outword := Outword + char(ord(Inword[i])-i);
klappt aber leider auch nicht.
Steffen
  Mit Zitat antworten Zitat
jottkaerr

Registriert seit: 2. Jul 2007
Ort: Tuttlingen
81 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Ord() Funktion unter Android

  Alt 10. Mai 2019, 14:53
Nein, wenn Du das so machst, dann subtrahierst Du am Ende eins zu wenig.

Also entweder

Code:
for i := 0 to length(Inword)-1 do
    Outword := Outword + char(ord(Inword[i])-i-1);
oder

Code:
for i := 1 to length(Inword) do
    Outword := Outword + char(ord(Inword[i-1])-i);
Jürgen Krämer
Sometimes I think the surest sign that intelligent life exists elsewhere
in the universe is that none of it has tried to contact us. (Calvin)
  Mit Zitat antworten Zitat
Stewag

Registriert seit: 12. Jun 2008
175 Beiträge
 
Delphi 12 Athens
 
#5

AW: Ord() Funktion unter Android

  Alt 10. Mai 2019, 15:07
Super - so klappt es!
Danke!
Steffen
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Ord() Funktion unter Android

  Alt 12. Mai 2019, 09:32
Darauf bin ich auch schon reingefallen!

Als Android compiliert muss man ab 0 zählen, bei Windows ab 1.

Eigentlich ein Unding dass man einen Code ändern muss damit er bei Android funktioniert...

Fehler von Embarcadero?

Ciao
Stefan
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#7

AW: Ord() Funktion unter Android

  Alt 12. Mai 2019, 12:40
Das ist 0-based bei den Mobilen.

Dafür gibt es aber eine Reihe handlicher Helper
MyString.Chars[0];
Mystring.Length;
MyString.SubString(0, len); // glaube ich ohne nachzulesen.
...
...


Die funktionieren mit 1 und 0 based strings.
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
488 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Ord() Funktion unter Android

  Alt 15. Mai 2019, 00:12
Hier ein paar Tipps:
  • Du kannst auch den String-Helper aus System.SysUtils nehmen. Der hat eine Chars[Index] property, die auch bei 0 beginnt.
  • Low(MyString) gibt unter jeder Plattform immer den ersten verfügbaren Index des Strings zurück. High(MyString) immer das letzte, oder, bei leeren Strings, das erste minus 1.
  • Anstatt eines direkten Casts von Integer nach Char , solltest du die intrinsische Chr(MyOrdinal) -Funktion verwenden. Genau so, wie du ja auch nicht den Char nach Integer castest, sondern schön brav Ord(MyChar) verwendest.
Dennis
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.960 Beiträge
 
Delphi 12 Athens
 
#9

AW: Ord() Funktion unter Android

  Alt 15. Mai 2019, 21:56
Man kann die 0-Indizierung auch per define abstellen, funktioniert nur leider nicht für die Helper:

{$ZEROBASEDSTRINGS OFF}
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
488 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Ord() Funktion unter Android

  Alt 16. Mai 2019, 01:11
Edit: Ups, verlesen
Dennis
  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 03:37 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