Schrift
[thread]6728[/thread]

Problem beim Wandeln für Hex-Zugriff: Http-Request über Server auf Oracle-DB



<< >> 5 Einträge, 1 Seite
holgi66
 2005-02-23 08:38
#51948 #51948
User since
2005-02-23
1 Artikel
BenutzerIn
[default_avatar]
Ich habe folgendes Problem :
Ich muss über http-request eine Oracle-DB über einen Server ansprechen.
dabei muss ich die Werte hexal übergeben, und zwar so, dass z.b. der Buchstabe a mit 4
Byte übergeben wird : "\x61\x00\x00\x00", oder z.b. die Zahl 1 : "\x31\x00\x00\x00".
Die Eingaben dazu werden dynamisch erzeugt.
Wie bekomme ich die am sinnvollsten gewandelt ?

Hab eine Funktion geschrieben, die das über eine Tabelle machen soll, aber die bringt das beim print anders raus, als wenn ich das direkt zuweise, wandelt das irgendwie nicht richtig :

Coding :
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/usr/bin/perl -w
use strict;
print "Content-Type: text/html\n\n";

my $userid = "$ENV{'REMOTE_USER'}";
print "id: ".$userid."
";

my $hexbid=&hex_formatieren($userid);
$hexbid="\x0E\x00".$hexbid;
print "hexbid: $hexbid
";
my $bid="\x0E\x00\x66\x00\x30\x00\x30\x00\x32\x00\x36\x00\x37\x00\x39\x00";
print "bid: $bid
";

sub hex_formatieren {
my ($mess) = @_;
#print "mess : $mess
";
my $erg;
my $hextab = "/users/elbaeak/bin/cgibin/hextab";
my $i = 0;
print "len : ".length($mess)."
";
while ($i < length($mess) )
{
#print "i : $i
";
open (HEXTAB,"<$hextab");
while ()
{
if (substr($_,0,1) eq substr($mess,$i,1))
{

$erg = $erg.substr($_,1,8);
#print "sign:".substr($mess,$i,1)."
";
#print "erg :".$erg."
";
}
}
close(HEXTAB);
$i++;
}

print "erg: ".$erg."
";
return $erg;
} # ende hex_formatieren

Ausgabe :

id: f002679
len : 7
erg: \x66\x00\x30\x00\x30\x00\x32\x00\x36\x00\x37\x00\x39\x00
hexbid: \x66\x00\x30\x00\x30\x00\x32\x00\x36\x00\x37\x00\x39\x00 # Ausgabe aus Funktion
bid: f002679 # Ausgabe aus direkter Zuweisung, so sollte es auch sein

Tabelle, die in hextab eingelesen wird :

0\x30\x00
1\x31\x00
2\x32\x00
3\x33\x00
4\x34\x00
usw.

Bin in Perl noch nicht so tief drin, denke mal, dass man das eleganter lösen kann,
oder ?

Gruß
Holger\n\n

<!--EDIT|renee|1109145482-->
Dubu
 2005-02-23 10:14
#51949 #51949
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ich vermute, hier liegt ein Missverstaendnis vor.

Wenn du z.B. den String "\x31\x32" in einem Perlcode eingibst, dann erzeugt das bei der Kompilation das gleiche wie der String "12", naemlich eine ASCII "1" gefolgt von der ASCII "2", was identisch ist mit den hexadezimalen ("hexal" ist eine Pharmafirma, keine 16er-Kodierung ;)) Codes 31 und 32 bzw. dezimal 49 und 50.

Wenn du aber in einem Perlprogramm die Zeichen '\', 'x', '3' und '1' in einem String zusammenbastelst, dann ist das immer noch diese Zeichenfolge. Die Darstellung "\x31" ist nur dazu da, dass man bei der Programmierung auf einfache Weise ASCII-Codes eingeben kann.

Jetzt ist die Frage: Was willst du an die Datenbank uebermitteln? Sollen es die ASCII-Codes fuer "1" und 2" etc. sein , oder die Zeichenfolge Backslash-kleines_x-drei-eins-Backslash-kleines_x-drei-zwei?\n\n

<!--EDIT|Dubu|1109146525-->
Gast Gast
 2005-02-23 14:31
#51950 #51950
Es soll das letztere, also der Ascii-Code, an die DB übergeben werden.
Wie macht man das denn am sinnvollsten, wenn die Werte
dynamisch übergeben werden aus einem abgeschickten Formular ?
Gast Gast
 2005-02-23 14:31
#51951 #51951
Sorry, natürlich ist die erste Variante gemeint ...
ptk
 2005-02-23 15:09
#51952 #51952
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Brauchst du zufaellig ein Encoding? Sieht fast wie UTF-32LE aus...
<< >> 5 Einträge, 1 Seite



View all threads created 2005-02-23 08:38.