Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

295
Visualizações
Escribir ceros en el segmento de archivo

Estoy usando fwrite para escribir un archivo (es una imagen).

Primero, estoy escribiendo un encabezado que tiene un tamaño fijo

 int num_meta_write_bytes = fwrite(headerBuffer, 1, headerSize, file);

esto funciona bien

Entonces tengo que escribir los píxeles:

 num_write_bytes = fwrite(data_pointer, 1, image_size, file);

esto funciona bien

Para mi caso, tengo que escribir un número variable de ceros entre el encabezado y los píxeles, la solución (¿fea?) que encontré es:

 for (size_t i = 0; i < padding_zeros; i++) //padding_zeros is calculated in runtime { uint8_t zero = 0; num_meta_write_bytes += fwrite(&zero, 1, sizeof(uint8_t), fp); }

(Este código se coloca antes de escribir los píxeles)

Mi pregunta es: ¿hay alguna manera de decirle directamente a fwrite que escriba continuamente el mismo valor padding_zeros veces? en lugar de usar esto for bucle?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Puede crear un bloque de datos lleno de ceros con calloc() , luego escribir esos datos en el archivo en una llamada (y recuerde free los datos después):

 uint8_t* zeros = calloc(padding_zeros, sizeof(uint8_t)); if (zeros) { num_meta_write_bytes += fwrite(zeros, sizeof(uint8_t), padding_zeros, fp); free(zeros); } else { // Error handling, or use your 'loop' method if calloc fails }

Como se menciona en los comentarios, también podría usar una matriz de longitud variable; sin embargo, los VLA son una característica 'opcional' en C (desde el estándar C11), y de todos modos tendría que establecer explícitamente los datos en ceros (con una llamada a memset ), ya que los VLA no se pueden inicializar como ordinarios (tamaño fijo) arreglos

over 4 years ago · Santiago Trujillo Relatório

0

Encontré otra solución, aunque creo que depende del sistema operativo:

 fseek(fp, padding_zeros, SEEK_CUR);

Esto es bastante rápido ya que no hay asignación. Justo al copiar el archivo resultante, el sistema operativo generará los ceros reales.

Esto funcionó bien en mi objetivo de Linux.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda