sprintfでデータをフォーマットすると、unsigned int type%dが負の解として出力されます

#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);
}

コンパイル結果:

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

 

%ld、%d、%uは、すべてフォーマット指定子のタイプです。その機能は、フォーマット指定子で指定されたフォーマットに従って入力または出力データを入力または出力することです。

(1)%ldは、データが10進数の符号付き長整数として入力または出力されることを示します。

(2)%dは、データが10進数の符号付き整数として入力または出力されることを示します。

(3)%uは、データ10進数の符号なし整数として入力または出力されることを示します

 

つまり:

sprintf(num、 "%d"、(unsigned int)(0xFFFFFFFF));を次のように変更します。

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

105件の元の記事を公開 30のような 16万人以上の訪問者

おすすめ

転載: blog.csdn.net/happygrilclh/article/details/105657289