Quelqu'un peut-il identifier ce codage?
Je travaille sur un programme pour l'interface avec un peu de matériel, c'est l'envoi des données qui ont été codées et enveloppé d'envoyer à l'intérieur d'un bloc CDATA dans un document XML.
le logiciel de l'appareil aussi loin que je sais, c'est écrit en Python et je suis en train d'écrire l'interface de Delphi.
les données de l'appareil envoie est ce
\x00E\x18\x10\x14}*UF!A\x81\xac\x08&\x02\x01\n\x15\x1a\xc2PP\x92\x17\xc2\xc1\xa0\x0e\x1a\xc2\xd0K\x94\'\x830\x11\x8b
\x84a_\xa0+\x04\x81\x17\x89\x15D\x91B\x05.\x84\xf1\x1b\x89%E\x00\x04\x9c\x0e\xc5\xc1=\x87\x0bE\xf18\x07\x1f\xc8a\xa5\x95\x08H\x80?\x84\x18\tPK\x8a$\t\xf1\xb2\x8e(J\xb0\x08\x91\x1eJ\xf0W\x0c-\x0b\xf0\x0e\x88\x07\x0c\x00\x9b\n
\x910Z\x06!\x92\xf0W\x073S
\x08\x87\xff\xff\xff\xf0\x0e\xff\xff\xff\xff\xff\xf3\x10\x0e\xba\xff\xff\xff\xf4C
\xed\xbb\xb9_\xffDD1\r\xcb\xbaw\xf5TD2\xed\xbb\xba\x88EUDB\x0c\xba\xaa\x99UUDB\x0c\xba\xaa\xa9UUD2\r\xbb\xaa\xaaUTD2\r\xcb\xbb\xaaUTC!\r\xcb\xbb\xbbUD3!\x0e\xdc\xbb\xbbDD3!\x0e\xdc\xcc\xbbDC2!\x0e\xdc\xcc\xcc33"\x11\x0e\xdd\xcc\xccC3"\x11\x0e\xed\xdc\xcc\xf33!\x10\x0e\xee\xdd\xcc\xf32!\x10\x0e\xee\xdd\xdc\xff2!\x10\x00\xee\xee\xdd\xff\xf2!\x11\x00\x0e\xee\xdd\xff\xf2!\x11\x10\x0e\xee\xef\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
J'ai besoin d'être en mesure d'envoyer des données vers l'appareil, mais le format que j'ai, c'est ce
0x451C0E148A4A65781B0291080E1644b0680b340580a28615c9001e8f1ec9f0559d260a4147901a0af16d93304bc09a8523cc513e25218ca00cd42c0ce137891fcdb02397054dd07c04124e112408158e5124841e0ed17f8e28cee12c96284f511b231c8fb07c1228d09079bd31d090960b2050b075871cd1217b8d171131830b3552509a8e295271621d2e9271ad972ed371ab93fffcdffffffffffffcddffffffffffbccde0122fffffbccde01123fffbbbcde011234ffaabcde001233ffaabcce001234ffaaabcde01234ffaaabcde01234ffaaaabce01344faaa99abe12344faaa99abe124555faa99aac044555faa9999a96655ffaa9989998765ffaa98899bb855ffaa9999abbd45ffaa9999abcd34faaa999aabcd345faaa999bbcd33f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Je sais que \x est généralement utilisé pour représenter les caractères ascii à l'aide de leurs valeurs hexadécimales dans les 2 paires de chiffres, mais en regardant les données, ce n'est pas le cas. j'ai du mal à identifier le codage utilisé et le fabricant n'est pas de fournir beaucoup d'aide.
ce que je veux savoir, c'est comment puis-je convertir l'hexagone, j'ai pour le format qu'ils sont à l'aide de Delphi xe4?
Entre les deux blocs ne contiennent pas les mêmes données, mais c'est le même type de données, c'est à dire le format est le même, juste un codage différent
exemple des données envoyées
POST ******** HTTP/1.1 Host: 172.16.1.136:8080 Accept-Encoding: identity Content-Length: 1552 Content-Type: text/xml Authorization: 1344354:PASS User-Agent: *********
<?xml version="1.0" encoding="utf-8"?> <Biometrics> <Templates>
<Template badge="1075" readerType="6" index="6" ts="2014-11-06T17:28:40.000+01:00" chk="3a6a4924ec04e668186b15e244e6fe73"> <![CDATA[ ['1075_6',
1415294920.3754971, [0, 0], [['3\x04\x00\x00\x00P\x00\x00E\x18\x10\x14}*UF!A\x81\xac\x08&\x02\x01\n\x15\x1a\xc2PP\x92\x17\xc2\xc1\xa0\x0e\x1a\xc2\xd0K\x94\'\x830\x11\x8b \x84a_\xa0+\x04\x81\x17\x89\x15D\x91B\x05.\x84\xf1\x1b\x89%E\x00\x04\x9c\x0e\xc5\xc1=\x87\x0bE\xf18\x07\x1f\xc8a\xa5\x95\x08H\x80?\x84\x18\tPK\x8a$\t\xf1\xb2\x8e(J\xb0\x08\x91\x1eJ\xf0W\x0c-\x0b\xf0\x0e\x88\x07\x0c\x00\x9b\n \x910Z\x06!\x92\xf0W\x073S \x08\x87\xff\xff\xff\xf0\x0e\xff\xff\xff\xff\xff\xf3\x10\x0e\xba\xff\xff\xff\xf4C \xed\xbb\xb9_\xffDD1\r\xcb\xbaw\xf5TD2\xed\xbb\xba\x88EUDB\x0c\xba\xaa\x99UUDB\x0c\xba\xaa\xa9UUD2\r\xbb\xaa\xaaUTD2\r\xcb\xbb\xaaUTC!\r\xcb\xbb\xbbUD3!\x0e\xdc\xbb\xbbDD3!\x0e\xdc\xcc\xbbDC2!\x0e\xdc\xcc\xcc33"\x11\x0e\xdd\xcc\xccC3"\x11\x0e\xed\xdc\xcc\xf33!\x10\x0e\xee\xdd\xcc\xf32!\x10\x0e\xee\xdd\xdc\xff2!\x10\x00\xee\xee\xdd\xff\xf2!\x11\x00\x0e\xee\xdd\xff\xf2!\x11\x10\x0e\xee\xef\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00']]] ]]> </Template>
</Templates> </Biometrics> HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: text/xml;charset=ISO-8859-1 Transfer-Encoding: chunked Date: Thu, 06 Nov 2014 17:28:41 GMT
52 <?xml version="1.0" encoding="UTF-8"?><OperationStatus uid="">OK</OperationStatus> 0
Ce sont biométriques, les modèles utilisés par la Suprema Lecteur si cela aide.
Solution
J'ai réussi à déchiffrer ce qui se passe maintenant. pour activer ma chaîne hexadécimale dans le format requis, je suis en utilisant ce code, espérons que cela aide quelqu'un d'autre dans l'avenir. N'hésitez pas à commenter et faire des suggestions pour améliorer le code.
class function TConvert.HexToPythonEscAscii(const aHexString: string): string;
var
i: Integer;
ByteArray: array of Byte;
begin
Result := '';
SetLength(ByteArray, (length(aHexString) div 2) );
TConvert.HexToBytes(aHexString, ByteArray, length(ByteArray));
for i := Low(ByteArray) to High(ByteArray) do
begin
if ByteArray[i] in [$20..$7E] then
begin
case ByteArray[i] of
$5c : Result := Result +'\\';
$27 : Result := Result +'\''';
else
Result := Result + char(ByteArray[i])
end;
end
else
begin
case ansichar(ByteArray[i]) of
TAB : Result := Result + '\t';
LF : Result := Result + '\n';
CR : Result := Result + '\r';
else
Result := Result + '\x' + LowerCase(IntToHex(ByteArray[i], 2));
end;
end;
end;
end;
Ressemble binaire plutôt que le texte codé. Ce qui ne les docs disent?
Comme pour le \x qui est juste un octet représenté comme hex. Tout le reste est de l'ascii.
docs dire cela, mais son manifestement erronées "les données doivent être envoyées au format ASCII. Si un modèle est binaire, il doit être encodé en Base64"
Ive a eu ces commentaires du fabricant "je pense que c'est un peu relatif; les caractères individuels sont exprimés en UTF-8, mais ils pourraient se combiner pour représenter une plus grande UTF-16 éléments, mais comme présenté peut être fait vraiment avec n'importe quel jeu de caractères. Malheureusement, certains environnements, ou des langues rendre le traitement unicode plus facile que d'autres; le nôtre son origine, non pas tellement dans les autres. Donc, pour nous, il est facile de convertir une simple chaîne de caractères ASCII. Chaque char est encore un ord() 0..255, donc peut être lu/écrit en ascii, hex ou unicode."
OriginalL'auteur Mike Taylor | 2014-11-07
Vous devez vous connecter pour publier un commentaire.
Cela ressemble à des données binaires lieu dans un Python
bytes
objet. Vaguement, d'octets de la carte pour les caractères ASCII imprimables sont présentés comme ceux des caractères ASCII. Tous les autres octets sont codés\x**
où**
est la représentation hexadécimale de l'octet.La documentation Python décrit octets littéraux ici: https://docs.python.org/3.4/reference/lexical_analysis.html#strings
À ce que le binaire signifie, je suppose que vous le savez.
C'est assez facile à analyser. Si vous retirez un
` then the next character will be
x` et après que deux chiffres hexadécimaux. C'est un octet. Sinon vous avez ASCII. Si vous aviez un général de chaînes, vous devrez répondre à octal et d'autres s'échappe mais il semble que cela a été formaté parstr()
. Vous pouvez tirer que dans uneTBytes
assez facilement le droit?merci beaucoup je ne suis pas un dev python et c'était vraiment embarrassant de moi. mal lui donner un bash maintenant.
Gah format de commentaire foiré. Veut dire "tirer un \"
tout simplement de le tester maintenant et ill vous laisser savoir si vous êtes correct
OriginalL'auteur David Heffernan