Zeichenkette auslesen

4Josh

Level-1
Beiträge
54
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich würde gern eine Zeichenkette aus einer Datei auslesen.
Vlt. kann jemand weterhelfen:

'CHARSET: [iso-8859-1] [German]

Wie kommt man vom ausgelesenen Wert auf den Integer?
Integer Wert
Ausgelesen aus Datei
3A0000000000000000000000
1
3A0000000000803F00000000
2
3A0000000000004000000000
3
3A0000000000404000000000
4
3A0000000000804000000000
5
3A0000000000A04000000000
6
3A0000000000C04000000000
7
3A0000000000E04000000000
8
3A0000000000004100000000
9
3A0000000000104100000000
10
3A0000000000204100000000
11
3A0000000000304100000000
12
3A0000000000404100000000
127
3A0000000000FE4200000000
128
3A0000000000004300000000
129
3A0000000000014300000000
130
3A0000000000024300000000
 
Whoops

Also, da ich da sehr eingerostet bin, würde ich zuerst in Dezimal umwandeln und dann in binär.
Von Hex in Dezimal kann man sich klasse so merken:


Code:
Von links nach rechts:
1.Zahl x16 + 2.Zahl = Zwischenergebnis1
Zwischenergebnis1 x16 + 3.Zahl = Zwischenergebnis2
Zwischenergebnis2 x16 + 4.Zahl = Endergebnis.

Beispiel FE42:

15 x 16 +14 = 254
254 x 16 +4 = 4068
4068 x16 +2 = [U]65090[/U]

Ins Binäre sollte man dann wieder wissen, wie es geht ;)

Flo

*** Eben gesehen, dass du das gar nicht wissen willst. Hatte nur die HEX in Fett gesehen und dachte du wolltest hiervon den Dezimalwert :rolleyes: Bin noch nicht wach :ROFLMAO:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Gibt es vom Ersteller der Datei eine Dokumentation der verwendeten Codierung? Wo kommt die Datei her?
Bist Du sicher mit den Werten für 2 und 3?

Wenn sich kein Umrechnungsalgorithmus findet läßt, dann könntest Du eine Umcodierungstabelle verwenden.

Harald
 
Naja, Wenn ich mal 0 und 1 vergesse, sieht das so aus, als ob du die beiden Bytes 5 und 6 (von hinten an gezählt)einzeln betrachten musst, miteinander vertauschen und 0x4000 abziehen. Dann noch Hex==>Dez und fertig. Die 0 und die 1 sind die einzigen Außreißer.
BTW: iso-8859-1 ist anders spezifiziert. Schau mal https://de.wikipedia.org/wiki/ISO_8859-1

MfG
RoMe
 
@Flo:
Du bist doch gar nicht so falsch ...
Lediglich hast du vergessen, dass hier erstmal der Charakter-Wert eingelesen wird (also 48 für "0", 49 für "1" usw.) Das muß man berüksichtigen. Desweiteren muss man dann die Buchstaben A - F separat verrechnen (weil 65 für "A", 66 für "B" usw.).
Das wäre dann auch gleichzeitig der Algorithmus ... ;)

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

danke für die vielen Antworten:

@PN/DP
  • die Datei ist ein Programm für eine Industriekamera von Hersteller Cognex (xxx.job)
  • 2 und 3 bin ich mir Sicher
  • Umrechnungsalgorithmus den suche ich :p

Weitere Infos:
  • die Hex Werte ändern sich bis 255 nur an 4 stellen dann wie folgt 3A0000000000024300000000
  • die Integerwerte sind Qualitätsparameter dich ich gerne in eine Excel oder VB.net Programm einlesen möchte
  • sollten noch zahlen benötigt werden kann ich diese gern aus dem Programm generieren


Vielen Dank

Gruß 4josh
 
Der Umrechnungs-Algorithmus ist doch von King Helmer nun schon genannt worden ... Wenn du das mit meinem Beitrag kombinierst dann kannst du dir die einzelnen ASCII-Zeichen des Eingangsstrings zu passenden Zahlenwerten umrechnen.
Oder an welcher Stelle hängst du aktuell noch ?

Gruß
Larry
 
Also ich kann an dem Beispiel von KingHelmer keinen Umrechnungsalgorithmus erkennen, der auf die Werte passen würde. Er kommt ja noch nichtmal in dem gezeigten Beispiel von FE42 auf das geforderte Ergebnis 127
Auch der von RoMe genannte Algorithmus passt überhaupt nicht.

Wenn man sich die Beispiele ansieht, sollte man erkennen können, daß da auch noch Bit-Wertigkeiten vertauscht werden. Also ich kann aus den paar Beispielen keinen einfachen Algorithmus erkennen, geschweige denn Vorhersagen zu den nicht gezeigten Werten machen. Man bräuchte eine komplette Liste der Werte 0 bis 255 oder eine Dokumentation des verwendeten Codierschemas.

Mal kurzgefasst die Aufgabenstellung, wie ich 4Josh verstehe. Es soll umcodiert werden:
Code:
0000 --> 0
803F --> 1
0040 --> 2
4040 --> 3
[COLOR="#FF0000"]8[/COLOR]040 --> 4
[COLOR="#FF0000"]A[/COLOR]040 --> 5
[COLOR="#FF0000"]C[/COLOR]040 --> 6
[COLOR="#FF0000"]E[/COLOR]040 --> 7
[COLOR="#FF0000"]0[/COLOR]041 --> 8
[COLOR="#FF0000"]1[/COLOR]041 --> 9
[COLOR="#FF0000"]2[/COLOR]041 --> 10
[COLOR="#FF0000"]3[/COLOR]041 --> 11
[COLOR="#FF0000"]4[/COLOR]041 --> 12
...
FE42 --> 127
0[COLOR="#FF0000"]0[/COLOR]43 --> 128
0[COLOR="#FF0000"]1[/COLOR]43 --> 129
0[COLOR="#FF0000"]2[/COLOR]43 --> 130
...
???? --> 255

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moment ... ich hatte es so verstanden (und das gilt wahrscheinlich auch für KingHelmer), dass die 4 fett dargestellten Zeichen in einen INT-Wert umgerechnet werden sollen.
Wenn man es so auslegt, wie du es jetzt dargestellt hast ... sorry ... da sehe ich dann auch keinen sinnvollen Zusammenhang. Aber man könnte natürlich auch mal den fragen, der das verbrochen hat. Vielleicht ist es dann doch wieder ganz einfach ...

Gruß
Larry
 
Hallo,

kann die Zahlen bis 255 erst am Montag bereitstellen. Also bis dann :)

Danke & euch ein schönes Wochenende

Gruß 4Josh
 
Hallo 4Josh

Ich lese Kamera und Qualitätsmerkmal.

Was für eine Kamera hast du denn?

Kann es sein, dass deine Datei gar keine Integer enthält sondern einen Bildpunkt dem eine bestimmten Qualität zugeordnet wird?

Wenn ich deine Werte von 0 - 12 mal in eine BMP übertrage erhalte ich ein Spektrum von Grün

Ist nur so eine Idee:p

Holger

Anhang anzeigen test5.bmp
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo holgermaik,

von Firma Cognex.
Sollte eig nicht sein. Habe ein leeres Programm erstellt mit einem Einstellparameter von typ Int

Werde morgen zusätzlich die gesamte Datei zur verfügung stellen :)

Gruß 4Josh
 
Guten Morgen,

hier die ausgelesenen Werte (Excel), sowie eine Datei mit einem Einstellwert von Typ Integer in Zelle A2.

Gruß 4Josh
 

Anhänge

  • Kopie von Test_Cognex.zip
    35,4 KB · Aufrufe: 15
Hallo!
Harald, du hast natürlich Recht, mein Algorithmus war totaler Käse!
Ich habe mir mal erlaubt, die gegebenen HEX-Werte der beiden im originalen Post fett gedruckten Bytes in binärer Form anzugeben. Ich habe die Bytes wieder vertauscht.
Code:
02    01000000 00000000
03    01000000 01000000
04    01000000 10000000
05    01000000 10100000
06    01000000 11000000
07    01000000 11100000
08    01000001 00000000
09    01000001 00010000
10    01000001 00100000
11    01000001 00110000
12    01000001 01000000
13    01000001 01010000
14    01000001 01100000
15    01000001 01110000
16    01000001 10000000
17    01000001 10001000
18    01000001 10010000
19    01000001 10011000
20    01000001 10100000
21    01000001 10101000
22    01000001 10110000
23    01000001 10111000
24    01000001 11000000
25    01000001 11001000
26    01000001 11010000
27    01000001 11011000
28    01000001 11100000
29    01000001 11101000
30    01000001 11110000
31    01000001 11111000
32    01000010 00000000
33    01000010 00000100
34    01000010 00001000
35    01000010 11000100
36    01000010 00010000
37    01000010 00010100
38    01000010 00011000
39    01000010 00011100
Es sieht so aus, als ob in Bit 6 angefangen wird und dann in beide Richtungen immer dann eine Stelle hinzugefügt wird, wenn alle Stellen auf 1 stehen. Beim Hinzufügen wird im MSB eine 1 geschrieben und vom LSB an binär hoch gezählt.

Das ist ein merkwürdiger Algorithmus! Einen eigenen Algorithmus zu schreiben, den Code in Integer umzuwandeln erfordert nochmal bissel Grips. In welcher Sprache brauchst du das?

  • nimm aus dem Codes die Bytes 5 und 6
  • Tausche die beiden Bytes
  • Schreibe in Bit 15 eine 0
  • Zähle die Bits von Bit 14 bis zum ersten mal, wo eine 1 kommt, das Ergebnis sei n
  • Schiebe die Zahl um n Bits nach rechts
  • Interpretiere die Zahl als Integer.
  • Addiere 2

Harald, was sagst du? Könnte das hin kommen?

RoMe
 
Hallo 4Josh,

die zwei relevanten Bytes nenne ich mal Byte6 und Byte7:
Code:
Byte 0  1  2  3  4  5  6  7  8  9  10 11
     3A 00 00 00 00 00 [B]7F 43[/B] 00 00 00 00 ---> [B]255[/B]
In Deiner Umcodierungstabelle kann ich erkennen: Byte6 enthält codiert den Wert, Byte7 und das höchste Bit von Byte6 enthalten die Information, wie oft der Wert aus Byte6 rechts-geschoben werden muß. Vor dem Schieben ist in Byte6 das höchste Bit auf 1 zu setzen. Man könnte eine Fallunterscheidung nach Byte7 (3F, 40, 41, 42, 43) machen oder eine Formel erstellen.

Hier eine Anleitung (als Pseudocode), wie aus Byte6 und Byte7 der IntWert berechnet werden kann:
Code:
bL  = Byte6
bH  = Byte7
wHL = bH * 256 + bL
ShiftZahl = 134 - SHR(wHL, 7)
WENN ShiftZahl < 0 DANN ShiftZahl = 0

WENN wHL = 0 DANN IntWert = 0
SONST IntWert = SHR(bL OR 16#80, ShiftZahl)
Nicht getestet! (SHR ist Bit-schieben rechts)

Harald
 
Zurück
Oben