Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Widestring Problem (https://www.delphipraxis.net/164200-widestring-problem.html)

Seren200018 2. Nov 2011 15:28

Widestring Problem
 
Ich habe folgendes Problem.
Ich versuche aus einem C60 der Firma Cypher Instrumens Daten auszulesen (das Anweisungen geben funktioniert).
Die Anweisung wird über eine Funktion namens ReadString als System.Widestring zurück gegeben.
Ich habe nun versucht es über den folgenden Code auszulesen:

Delphi-Quellcode:
procedure Tform1.Getdata(Sender: TObject);
var tempstr : widestring;
begin
  c60.DisableDataReceived;
  setlength(tempstr,67); //Die Nachrichten sind immer 67 Zeichen lang!
  c60.ReadString(tempstr,67);
  c60.EnableDataReceived;
end;
Das Ergebniss ist aber mehr als Sonderbar
Delphi-Quellcode:
'먺먠먱먰먰먰멥먰먠먶먴먰먰멥먰먠먱먰먰먰멥먰먠먱먰먰먰멥먰먠먰먰먍'

Wenn ich das ganze aber nun erst in seine Bitfolge umwandle und dann wieder zurück in Asci kommt das gewünschte Ergebniss raus

Delphi-Quellcode:
P:0 +1.000000e+01 +6.400000e+01 +1.000000e+00 +1.000000e+00 00001
Hat irgendjemand eine Idee?

Vielen Dank schon mal für die Hilfe!

P.s.
Ich habe folgende Char to bit funktionen benutzt
http://www.delphi-treff.de/tipps/obj...iten-mit-bits/

thkerkmann 2. Nov 2011 16:21

AW: Widestring Problem
 
Zeig doch mal den ganzen Code incl. Umwandlung und Rückwandlung.
Du empfängst wahrscheinlich gar keinen Widestring sondern einen Bitstring.

Gruss
Thomas

Seren200018 2. Nov 2011 17:07

AW: Widestring Problem
 
Umwandlungsunit

Delphi-Quellcode:
const
B1: Byte = 128;
B2: Byte = 64;
B3: Byte = 32;
B4: Byte = 16;
B5: Byte = 8;
B6: Byte = 4;
B7: Byte = 2;
B8: Byte = 1;

// wird von den Routinen benögtigt
function TestBit(ByteToTest, BitNr: Byte): Boolean;
var
  I: Integer;
begin
  Result := False;
  if BitNr <= 8 then
  begin
    I := ByteToTest shl BitNr;
    Result := ((128 and I) = 128);
  end;
end;

{Diese Funktion wandelt ein Zeichen in die zugehörige Bit-Folge}
function CharToBit(C: Char): string;
var
  A: Byte;
  B: Byte;
begin
  Result := '';
  B := Byte(C);
  for A := 0 to 7 do
    if TestBit(B, A) then
      Result := Result + '1'
    else
      Result := Result + '0';
end;

// String (Länge 8, aus '1' und '0') -> Char
function BitToChar(S: string): Char;
var A, B: byte;
    T: string;
begin
  Result := ' ';
  T := S;

  if length(T) < 8 then
    while length(T) <> 8 do
      T := T + '0';

  if length(T) > 8 then
    delete(T, 9, length(T));

  B := 0;

  for A := 1 to 8 do
    if T[A] = '1' then
      case A of
        1: B := B or B1;
        2: B := B or B2;
        3: B := B or B3;
        4: B := B or B4;
        5: B := B or B5;
        6: B := B or B6;
        7: B := B or B7;
        8: B := B or B8;
      end;

  Result := Char(B);
end;

// Byte in String / String in Byte
function ByteToBit(B: Byte): string;
begin
  Result := CharToBit(Char(B));
end;

function BitToByte(S: string): Byte;
begin
  Result := Byte(BitToChar(S));
end;
umgewandelt und rückumgewandelt wird einfach über
Delphi-Quellcode:
for i := 1 to 67
 ausgabe := ausgabe + bittochar(chartobit(eingabe[i]));
Mehr informationen kann ich leider erst morgen geben wenn ich wieder an dem pc arbeite.

p80286 2. Nov 2011 17:24

AW: Widestring Problem
 
Was bitte ist ein "BitString"? Etwa soetwas? "01001111001001..."
Abgesehen von der etwas seltsamen Darstellung, ich würde es durchaus als 8Bit-Wiedergabe eines 16Bit-Strings akzeptieren. Mit dem richtigen Font, könnte da durchaus etwas augenscheinlich sinnvolles erscheinen.

Gruß
K-H

himitsu 2. Nov 2011 18:48

AW: Widestring Problem
 
Zitat:

Wenn ich das ganze aber nun erst in seine Bitfolge umwandle und dann wieder zurück in Asci kommt das gewünschte Ergebniss raus
Und dann wunderst du dich?

Wenn es als ASCII/ANSI ankommt, dann kann man in einem Unicodestring nicht viel damit anfangen.

Entweder machst du einen Fehler, oder die Komponente ist nicht wirklich uncodefähig.

Welche Delphiversion nutzt du eigentlich?

Und ich denke du nutzt WideString, aber warum sind die Konvertierungsfunktionen dann als String deklariert?

thkerkmann 2. Nov 2011 19:17

AW: Widestring Problem
 
Zitat:

Zitat von p80286 (Beitrag 1134096)
Was bitte ist ein "BitString"? Etwa soetwas? "01001111001001..."
Abgesehen von der etwas seltsamen Darstellung, ich würde es durchaus als 8Bit-Wiedergabe eines 16Bit-Strings akzeptieren. Mit dem richtigen Font, könnte da durchaus etwas augenscheinlich sinnvolles erscheinen.

Gruß
K-H

Sorry, ich meinte einen Binarystring' also ein String der eigentlich ein Buffer ist.


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