zebra precio impresora etiquetas etiqueta c gcc

etiquetas - impresora rfid precio



Cómo imprimir el valor de las variables uint32_t y uint16_t? (3)

En mi caso, solo uso %u para generar el valor con el tipo uint32_t. Funciona.

p.ej

uint32_t i = 31 - __builtin_clz(mask); D("read i= %u ", __FUNCTION__, i);

Estoy intentando imprimir uint16_t y uint32_t value pero no está dando o / p deseado.

#include<stdio.h> #include <netinet/in.h> int main() { uint32_t a=12,a1; uint16_t b=1,b1; a1=htonl(a); printf("%d---------%d",a1); b1=htons(b); printf("/n%d-----%d",b,b1); return 0; }

Yo también utilicé

printf("%"PRIu32, a);

que muestra un error

Cómo imprimir este valor y cuál será el o / p deseado


Las macros definidas en <inttypes.h> son la forma más correcta de imprimir valores de los tipos uint32_t , uint16_t , etc., pero no son la única forma.

Personalmente, encuentro esas macros difíciles de recordar y difíciles de usar. (Dada la sintaxis de una printf formato printf , es probable que sea inevitable, no estoy afirmando que podría haber surgido un mejor sistema).

Una alternativa es convertir los valores a un tipo predefinido y usar el formato para ese tipo.

Los tipos int y unsigned int están garantizados por el lenguaje para que tenga al menos 16 bits de ancho, y por lo tanto para poder contener cualquier valor convertido de tipo int16_t o uint16_t , respectivamente. De forma similar, las long y unsigned long tienen al menos 32 bits de ancho, y las long long y unsigned long long tienen al menos 64 bits de ancho.

Por ejemplo, podría escribir su programa de esta manera (con algunos ajustes adicionales):

#include <stdio.h> #include <stdint.h> #include <netinet/in.h> int main(void) { uint32_t a=12, a1; uint16_t b=1, b1; a1 = htonl(a); printf("%lu---------%lu/n", (unsigned long)a, (unsigned long)a1); b1 = htons(b); printf("%u-----%u/n", (unsigned)b, (unsigned)b1); return 0; }

Una ventaja de este enfoque es que puede funcionar incluso con implementaciones anteriores a C99 que no son compatibles con <inttypes.h> . Tal implementación probablemente tampoco tendría <stdint.h> , pero la técnica es útil para otros tipos de enteros.


inttypes.h incluir inttypes.h si desea todos los nuevos e ingeniosos especificadores de formato para los tipos intN_t y sus hermanos, y esa es la forma correcta (es decir, portátil) de hacerlo, siempre que su compilador cumpla con C99. No debe usar los estándares como %d o %u en caso de que los tamaños sean diferentes de lo que piensa.

Incluye stdint.h y lo amplía con algunas otras cosas, como las macros que se pueden usar para la familia de llamadas printf/scanf . Esto se trata en la sección 7.8 del estándar ISO C99.

Por ejemplo, el siguiente programa:

#include <stdio.h> #include <inttypes.h> int main (void) { uint32_t a=1234; uint16_t b=5678; printf("%" PRIu32 "/n",a); printf("%" PRIu16 "/n",b); return 0; }

productos:

1234 5678