Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

314
Vistas
Cómo pasar cadenas de PHP a través de FFI a c/tensorflow

Algunas palabras sobre el contexto

Estoy trabajando en una biblioteca PHP que usa PHP FFI para hacer que tensorflow se pueda usar en PHP. Una parte de esa biblioteca tiene que pasar cadenas a la biblioteca c de tensorflow. Para poder hacer eso, existen estas definiciones en el archivo de encabezado c:

 extern void TF_StringInit(TF_TString *t); extern void TF_StringCopy(TF_TString *dst, unsigned const char *src, size_t size);

Después de mucha depuración, llegué a este código que pasa la cadena a TF_TString:

 // Initialize the TF_TString $tstr = TensorFlow::$ffi->new('TF_TString[1]'); TensorFlow::$ffi->TF_StringInit(FFI::addr($tstr[0])); // Unpack the input string $unpacked = unpack('C*', $str); $input = FFI::new('uint8_t[' . count($unpacked) . ']'); foreach($unpacked as $i=>$part) { $input[$i - 1] = $part; } // Copy the unpacked string into the TF_TString TensorFlow::$ffi->TF_StringCopy(FFI::addr($tstr[0]), $input, strlen($str) + 1);

La cuestión

Si $str es Hello World , esperaría que TF_TString ahora contenga Hello World .

En su lugar, es 0Hello World .

Entonces, la cadena siempre tiene el prefijo 0 .

Pensamientos adicionales

En teoría, sería posible que este problema suceda debido a mi lógica que convierte la cadena de tensorflow nuevamente a php. Sin embargo, tensorflow tiene una operación interna llamada StringJoin que espera dos cadenas como entrada y las une. Si uso esa operación para las cadenas Hello y World , obtengo 4HelloR World . Como hay un nuevo carácter R entre las palabras unidas, espero que el problema resida en mi codificación y no en otro lugar.

Espero cualquier tipo de aporte

Esta es una pregunta poco probable, porque no espero que mucha gente trabaje con PHP FFI todavía, pero tal vez (¡con suerte!) Hay alguien con más conocimiento sobre cadenas en c que pueda ayudar.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Tu intento es demasiado complejo. No necesita usar ninguna matriz, no necesita "descomprimir" la cadena PHP. El primer ejemplo de esta página muestra que puede pasar directamente una cadena PHP a un const char * param.

Aquí hay un ejemplo simple que debería funcionar:

 $ffi = FFI::cdef(' typedef struct TF_TString { char raw[24]; } TF_TString; void TF_StringInit(TF_TString *t); void TF_StringCopy(TF_TString *dst, const char *src, size_t size); ', 'tensorflow.dll'); // Allocate a TF_TString struct $tstr = $ffi->new('TF_TString'); // Initialize it $ffi->TF_StringInit(FFI::addr($tstr)); // Copy a PHP string to it $s = 'Hello World'; $ffi->TF_StringCopy(FFI::addr($tstr), $s, strlen($s));
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda