Foros del Web » Programando para Internet » PHP »

Microsoft Binary Format

Estas en el tema de Microsoft Binary Format en el foro de PHP en Foros del Web. Hola a tod@s, A ver si me podéis echar una mano, necesito pasar esta función que tengo en una aplicación asp a php: Código PHP: ...
  #1 (permalink)  
Antiguo 09/06/2011, 08:46
 
Fecha de Ingreso: octubre-2010
Mensajes: 12
Antigüedad: 13 años, 6 meses
Puntos: 0
Microsoft Binary Format

Hola a tod@s,

A ver si me podéis echar una mano, necesito pasar esta función que tengo en una aplicación asp a php:

Código PHP:
Private Declare Sub DxToIEEEd Lib "mbfiee32" (ByRef X As Byte)

Private Function 
CVDMBF(ByRef bTmp() As Byte) As Double
        CVDMBF 
0
        DxToIEEEd
(bTmp(0))
        
Dim objDouble As Object CDbl(0)
        
Dim MyGC As System.Runtime.InteropServices.GCHandle System.Runtime.InteropServices.GCHandle.Alloc(objDoubleSystem.Runtime.InteropServices.GCHandleType.Pinned)
        
Dim AddofLongValue As IntPtr MyGC.AddrOfPinnedObject()
        
System.Runtime.InteropServices.Marshal.Copy(bTmp0AddofLongValue8)
        
MyGC.Free()
        
CVDMBF objDouble
    End 
Function CVDMBF 
He estado buscando en la documentación de php, en google y no encuentro nada sobre el tema.

Muchas gracias
  #2 (permalink)  
Antiguo 09/06/2011, 08:48
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: Microsoft Binary Format

bueno es que no se asp, si traduces que hace cada funcion, te decimos su equivalente php
  #3 (permalink)  
Antiguo 09/06/2011, 08:54
 
Fecha de Ingreso: octubre-2010
Mensajes: 12
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Microsoft Binary Format

Si, perdona.

Básicamente me pasa un Array de 4 bytes a tipo Long.

Toda la documentación que he encontrado por internet hace referencia a funciones MBR to IEEE bajo windows, aunque tambien he visto la equivalente en pyhton, pero como no tengo ni idea...

la pongo en pyhton por si a alguien le pueda servir:

Código PHP:
def fmsbin2ieee(self,bytes):
    
"""Convert an array of 4 bytes containing Microsoft Binary floating point
    number to IEEE floating point format (which is used by Python)"""
    
as_int struct.unpack("i"bytes)
    if 
not as_int:
        return 
0.0
    man 
long(struct.unpack('H'bytes[2:])[0])
    
exp = (man 0xff00) - 0x0200
    
if (exp 0x8000 != man 0x8000):
        return 
1.0
        
#raise ValueError('exponent overflow')
    
man man 0x7f | (man << 8) & 0x8000
    man 
|= exp >> 1
    bytes2 
bytes[:2]
    
bytes2 += chr(man 255)
    
bytes2 += chr((man >> 8) & 255)
    return 
struct.unpack("f"bytes2)[0

Última edición por javiquero; 09/06/2011 a las 09:09
  #4 (permalink)  
Antiguo 09/06/2011, 09:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Microsoft Binary Format

Puedes traducir esa de python mas fácilmente, usando unpack() en PHP.

Saludos.
  #5 (permalink)  
Antiguo 09/06/2011, 10:19
 
Fecha de Ingreso: octubre-2010
Mensajes: 12
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Microsoft Binary Format

Gracias GaltorV, ya lo he intentado pero hay fragmentos de código que no se traducir.

De todos modos como veo que me he explicado bastante mal y nunca es tarde para rectificar, voy a explicar exactamente lo que tengo que hacer.

Necesito leer un archivo de datos de una aplicación antigua programada en Qbasic. Hasta aquí todo bastante bien, ahora un poco de historia:
El problema es que los señores de Microsoft en su aplicaciones de programación antiguas ya sea Basic, GwBasic, Qbasic, etc utilizaban un formato de punto flotante interno conocido como Formato binario de Microsoft (MBF). El estándar IEEE se incorporó más tarde y se convirtió en el estándar para todos los lenguajes.
Por esta razón no se puede leer un campo integer, long, double, etc de un archivo de datos de estas aplicaciones antiguas sin pasar por las funciones que os adjunto en mis anteriores mensajes.

Ej:
Array
(
[1] => 236
[2] => 81
[3] => 248
[4] => 64
)
Equivale a 7,76

Ej2:
Array
(
[1] => 205
[2] => 204
[3] => 0
[4] => 65
)
Equivale a 8,05


Bueno espero haberme explicado lo suficientemente bien,

Etiquetas: binary, format, microsoft
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:52.