EBCDIC, ASCII, Décimal et PHP

Petit nouveau ! | 2 Messages

23 déc. 2010, 16:15

Bonjour,

J'ai un problème plutôt sympa.

Je vous explique la situation, je travail sur une appli web synchronisé avec un systeme AS400.
Nous avons créé un systeme d'echange de données AS400 -> Serveur WEB.

Le petit souci que j'ai, c'est avec un décimal stocké sur le 400 en NUMERIC étendu.
Lors de la création du fichier d'échange sur le serveur mainframe, il y aurais une conversion EBCDIC > ASCII.

Lorsque je reçois le fichier sur le serveur WEB j'obtiens une chaine comme ceci.

Code : Tout sélectionner

00001105K
Ce qui signifie en décimal -110.52...

Je ne comprends pas comment le caractère K pourrais siginifier que mon float est négatif et que le dernier chiffre est egale a 2 ...

Avez-vous une idée ??

D'avance merci

ViPHP
ViPHP | 2577 Messages

23 déc. 2010, 16:54

Bonjour

00001105K
FFFFFFFFD
000011052
---------
000011052
FFFFFFFFF
000011052
---------
00001105B
FFFFFFFFC
000011052

C'est le codage des nombres sur les systèmes IBM

1105K => -11052
11052 => 11052 (non signé)
1105D => +11052

En général, je transfert les données sous la forme -1152 pour éviter les problèmes de convertion

Petit nouveau ! | 2 Messages

23 déc. 2010, 17:06

Oui c'est bien ce que j'avais compris le dernier caractére indique si le nombre est signé.
S'il est signé, et que la lettre est > a J c'est un négatif, sinon c'est un positif, c'est bien ça ou me trompe-je ?

Le probléme étant qu'on ne peux pas envoyer directement -110.52 car le fichier d'echange est un fichier plat, sans séparateur
DONNEE1DONNEE200001105KDONNEE3
Et je me base sur les positions des caractères pour découper les données en PHP.

As-tu déjà vu une solution de conversion ?