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