Al formatear datos en sprintf, el tipo int sin signo% d se imprime como una solución negativa

#include "string.h"
#include "stdlib.h"



void main()
{
	unsigned char num[10] = {0};

	 memset(num, 0, 10);
	 sprintf(num,"%d",(unsigned char)(0xFF));
	 printf("%s\n",num);
	 sprintf(num,"%d",(signed char)(0xFF));
	 printf("%s\n",num);
	 sprintf(num,"%d",(unsigned short)(0xFFFF));
	 printf("%s\n",num);
	 sprintf(num,"%d",(signed short)(0xFFFF));
	 printf("%s\n",num);
	 sprintf(num,"%u",(unsigned int)(0xFFFFFFFF));
	 printf("%s\n",num);
	 sprintf(num,"%d",(unsigned int)(0xFFFFFFFF));
	 printf("%s\n",num);
	 sprintf(num,"%d",(signed int)(0xFFFFFFFF));
     printf("%s\n",num);
}

Resultado de la compilación:

255
-1
65535
-1
4294967295
-1
-1
Press any key to continue

 

% ld,% d,% u son todos los tipos en el especificador de formato. Su función es ingresar o emitir los datos de entrada o salida de acuerdo con el formato especificado por el especificador de formato.

(1)% ld indica que los datos se ingresan o salen como un entero largo con signo decimal.

(2)% d indica que los datos se ingresan o salen como un entero con signo decimal.

(3)% u indica que los datos se ingresan o salen como un entero decimal sin signo .

 

Eso es:

Cambie sprintf (num, "% d", (unsigned int) (0xFFFFFFFF)); a:

sprintf (num, "% u", (unsigned int) (0xFFFFFFFF));

105 artículos originales publicados · Me gusta 30 · Visitas 160,000+

Supongo que te gusta

Origin blog.csdn.net/happygrilclh/article/details/105657289
Recomendado
Clasificación