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

232
Vistas
Python ctypes: ¿cuándo necesita agregar manualmente b`\0` a un objeto de bytes?

En Python ctypes, ¿cuándo, si alguna vez, necesita agregar manualmente el terminador nulo/cero b'\0' al pasar bytes a una función que espera datos terminados en nulo?

Específicamente para los 3 casos (pero otros bienvenidos)

  • Si el parámetro de la función ha sido declarado con c_char_p a través de sus argtypes

  • Si la función no ha tenido su parámetro declarado a través de argtypes

  • Usando memmove , si la interfaz espera una cadena terminada en nulo en una dirección de memoria,

     memmove(target, my_string.encode() + b'\0', len(my_string.encode()) + 1)

    o puedes hacer

     memmove(target, my_string.encode(), len(my_string.encode()) + 1)

Contexto: agrego b'\0' por paranoia en sqlite-s3-query y trato de averiguar si puedo eliminarlos. Parece funcionar bien si los elimino, pero me doy cuenta de que podría haber bytes nulos en los lugares correctos, por lo que todo funciona. Estoy buscando una garantía más fuerte de que los bytes nulos están ahí por diseño.

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

0

Al menos en CPython, el búfer interno para un objeto de bytes siempre termina en nulo y no es necesario agregar otro. Ya sea que especifique .argtypes o no, el puntero generado apuntará a este búfer.

Referencia: https://docs.python.org/3/c-api/bytes.html#c.PyBytes_AsString :

char * PyBytes_AsString (PyObject *o)
Parte del Estable ABI.
Devuelve un puntero al contenido de o . El puntero se refiere al búfer interno de o, que consta de len(o) + 1 bytes. El último byte en el búfer siempre es nulo, independientemente de si hay otros bytes nulos...

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