Ao formatar dados no sprintf, o tipo int não assinado% d é impresso como uma solução 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 da compilação:

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

 

% ld,% d,% u são todos os tipos no especificador de formato. Sua função é inserir ou enviar dados de entrada ou saída de acordo com o formato especificado pelo especificador de formato.

(1)% ld indica que os dados são introduzidos ou emitidos como um número inteiro longo com sinal decimal.

(2)% d indica que os dados são inseridos ou gerados como um número inteiro com sinal decimal.

(3)% u indica que os dados são recebidos ou enviados como um número inteiro decimal não assinado .

 

Isto é:

Altere sprintf (num, "% d", (sem assinatura int) (0xFFFFFFFF));

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

Publicado 105 artigos originais · Gosto 30 · Visita mais de 160.000

Acho que você gosta

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